我有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))
}