Ошибка 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

Замещать .catch { error -> Void in с .catch { error in

Другие вопросы по тегам