Ошибка Swift4 Невозможно преобразовать значение типа '(_) -> Void' в ожидаемый тип аргумента '(_) -> _'
Использование PromiseKit для вызова API в Swift 4:
let apiCall = ApiManager.shared.fetchActors()
apiCall.then { actors -> Void in
self.dataSourceArray = actors
self.tableView.reloadData()
}.catch { error -> Void in
}
Я получаю эту ошибку:
Невозможно преобразовать значение типа '() -> Void' в ожидаемый тип аргумента '() -> _'
Как мне решить эту проблему?
3 ответа
Решение
Решение:
func fetchActorsFromApi () -> Promise<[Actor]> {
return Promise<[Actor]> { seal in
return Alamofire.request(API_URL).validate().responseString(completionHandler: {
response in
switch (response.result) {
case .success(let responseString1):
print (responseString1) // should be converted into the modelclass
let actorResponse = ActorApiResponse(JSONString: "\(responseString1)")!
seal.fulfill(actorResponse.actors!)
case .failure(let error):
print (error)
seal.reject(error)
}
})
}
}
Используйте .done Вместо того, чтобы использовать .then, он будет работать.
let apiCall = ApiManager.shared.fetchActorFromAPI()
let _ = apiCall.done {
actors -> Void in
self.dataSource = actors
self.myTableView.reloadData()
}.catch {
error -> Void in
}
используйте это. В новой версии PromiseKit функция.done() может это сделать. Документация: https://github.com/mxcl/PromiseKit