I am trying to implement a generic method which is used to get data from API call.
Here is My code.
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)
}
}
}
}
I would like to make a generic method for all request. In my code, I made promise type List
and JSONDecoder().decode(List.self)
, Here I would like to make List type dynamic. How can we do that? I would like to reuse asyncGetRequest method for all the API calls. I want to pass request URL (GET_PROFFESSIONAL) and List class type as dynamic.
You could use Generics and write something like this:
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)
}
}
}
}