Обновление до Xcode 12: не удается преобразовать значение типа ‘DataRequest’ в тип результата закрытия ‘Void’

#ios #swift #alamofire #promisekit

#iOS #swift #alamofire #promisekit

Вопрос:

Я использую AlamoFire и PromiseKit для выполнения вызовов API.

Код работал нормально в течение 2 лет, пока я не обновился до Xcode 12.0.

Функция теперь возвращает ошибку: «Не удается преобразовать значение типа’DataRequest’ в тип результата закрытия ‘Void'»

Моя функция заключается в следующем:

    func fetchArticlesFromApi (API: String) -> Promise<[Article]> {
    return Promise<[Article]> { seal in
        return Alamofire.request(API).validate().responseString(completionHandler: { //Error happening here
            response in
            switch (response.result) {
            case .success(let responseString1):
                //Do something
            case .failure(let error):
                print (error)
                seal.reject(error)
            }
        })
    }
}
  

Ошибка, возникающая в третьей строке функции
Есть мысли, что могло измениться в этом обновлении?

Примечание: код работает нормально, когда я запускаю тот же код в xcode 11.6!

Комментарии:

1. Попробуйте обновить свои модули.

Ответ №1:

Я нашел ответ на это на Github.

https://github.com/mxcl/PromiseKit/issues/1165

Я не должен пытаться вернуть что-либо из закрытия, переданного Promise.init. Странно, как это работало в предыдущих версиях Xcode.

Чтобы исправить это, я должен заменить возврат перед Alamofire.request … на _ =

Теперь функция выглядит следующим образом:

     func fetchArticlesFromApi (API: String) -> Promise<[Article]> {
    return Promise<[Article]> { seal in
        _ = AF.request(API).validate().responseString(completionHandler: {
            response in
            switch (response.result) {
            case .success(let responseString1):
            //Do something
            case .failure(let error):
                print (error)
                seal.reject(error)
            }
        })
    }
}