2015-08-18 3 views
0

Я пытаюсь сделать асинхронный. с использованием обещаний Promisekit. У меня есть следующий код в подклассе UITableViewController, чтобы перезагрузить tableview с данными, которые извлекаются из async. запрос.Перезагрузка tableview в Promisekit's

my_promise.then { asynly_fetched_data in 
    self.data = asyncly_fetched_data 
    self.tableView.reloadData() 
} 

Однако следующее утверждение (self.tableView.reloadData()) вызывает следующую ошибку сборки.

Missing return in a closure expected to return 'AnyPromise' 

Это потому, что мы не можем вызвать reloadData() внутри замыкания. Если это так, то какова наилучшая практика для перезагрузки tableview после завершения асинхронного запроса.

ответ

2

Это быстрая ошибка. Но вы можете это исправить, добавив -> Void в вашем закрытии:

my_promise.then { asynly_fetched_data -> Void in 
    self.data = asyncly_fetched_data 
    self.tableView.reloadData() 
} 

Таким образом, Swift знает, что возвращение Пустоты.

+0

Спасибо! Это сработало. Но как вы выяснили, что (-> Void) исправляет проблему. – user462455

+0

Это известная ошибка. Раньше у меня была аналогичная проблема. – Christian

+0

это не ошибка - как работает многострочное закрытие - компилятор не может вывести тип возврата из вашего кода и сравнить его с требованием от определения метода. если вы оставили только одну строку - она ​​будет компилироваться нормально – sacred

Смежные вопросы