我正在尝试实现一个泛型方法,用于从API调用中获取数据。
这是我的代码。
class Http {
class func asyncGetRequest()->Promise<List> {
return Promise {
resolve in
Alamofire.request(GET_PROFFESSIONAL).responseData().done { response in
guard let blog = try? JSONDecoder().decode(List.self, from: response.data) else {
let error = MyError(message: "Error: Couldn't decode")
resolve.reject(error)
return
}
resolve.fulfill(blog as List)
}.ensure {
}.catch { error in
resolve.reject(error)
}
}
}
}
我想为所有请求制作一个通用方法。在我的代码中,我做了承诺类型列表
和JSONDecoder().decode(List.self)
,在这里我想将列表类型设置为动态。我们怎么做?我想对所有API调用重用 asyncGetRequest 方法。我想将请求网址( GET_PROFFESSIONAL )和列表类类型作为动态传递。
答案 0 :(得分:2)
你可以使用泛型并写下这样的东西:
class Http {
class func asyncGetRequest<ListType: Decodable>() -> Promise<ListType> {
return Promise { resolve in
Alamofire.request(GET_PROFFESSIONAL).responseData().done { response in
guard let blog = try? JSONDecoder().decode(ListType.self, from: response.data) else {
let error = MyError(message: "Error: Couldn't decode")
resolve.reject(error)
return
}
resolve.fulfill(blog as ListType)
}.ensure {
}.catch { error in
resolve.reject(error)
}
}
}
}