Alamofire Promise сделать общий метод запроса - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь реализовать универсальный метод, который используется для получения данных из вызова 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), здесь я хотел бы сделать динамический тип List . Как мы можем сделать это? Я хотел бы повторно использовать метод asyncGetRequest для всех вызовов API. Я хочу передать URL запроса ( GET_PROFFESSIONAL ) и List тип класса как динамический.

1 Ответ

0 голосов
/ 29 апреля 2018

Вы можете использовать Generics и написать что-то вроде этого:

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)
            }
        }
    }
}
...