用swift中的字符串值枚举int



我有API端点的枚举,我在创建基本url时使用这些端点。具有分页的API之一类似于分页="/api/pagination_test/%@">

现在,在分页期间,我想将值传递给enum-initalizer,并创建一个将被基本url创建函数接受的枚举。

enum APIEndPoints{
case registerUser = "/register"
case login = "/login"
case getData = "/data?"
case pagination = "/api/pagination_test/%@?"
}
func callPaginationAPI(pagenumber: Int){
//make enum with pagenumber, i am stuck in this line.
//let enum = 
//call main service method,pass enum as argument.
mainService(endPoint: .pagination) 
// this expect an enum of pagination with proper pagenumber
}
func mainService(endpoint: APIEndpoints){
//create base url here
let url = requestUrl()
//do nsurlsession with prepared url
}
func requestUrl( endPoint: APIEndPoints) -> String {
let baseURL = self.requestBaseUrl()
return baseURL + endPoint.rawValue
}

我如何创建一个值为1的分页枚举?我希望枚举为/api/pagination_test/1/api/pagination_test/2

首先应该更新枚举,这样我们就可以使用String(format:)

enum APIEndPoints: String {
case registerUser = "/register"
case login = "/login"
case getData = "/data?"
case pagination = "/api/pagination_test/%d?"
}

为了避免在所有方法中都必须将页码作为参数传递,最好将枚举与(可选(页码一起封装在结构中,并具有一个计算属性,以字符串形式获取端点

struct EndPoint {
let apiEndPoint: APIEndPoints
let page: Int?
var endPointValue: String {
switch apiEndPoint {
case .pagination:
return String(format: apiEndPoint.rawValue, page ?? 1)
default:
return apiEndPoint.rawValue
}
}
init(_ endPoint: APIEndPoints, page: Int? = nil) {
apiEndPoint = endPoint
self.page = page
}
}

然后传递这个结构的一个实例,而不是

func callPaginationAPI(pagenumber: Int){
mainService(endpoint: EndPoint(.pagination, page: pagenumber))
}

并在创建url 时使用计算属性

func requestUrl(endPoint: EndPoint) -> String {
let baseURL = self.requestBaseUrl()
return baseURL + endPoint.endPointValue
}

以及一个使用没有页码的结构的示例

func callLoginAPI() {
mainService(endpoint: EndPoint(.login))
}

最新更新