Alamofire Promise制作通用请求方法

时间:2018-04-29 13:07:14

标签: swift xcode generics alamofire

我正在尝试实现一个泛型方法,用于从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 )和列表类类型作为动态传递。

1 个答案:

答案 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)
            }
        }
    }
}