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