Я использую tableViewController
на моем проекте Swift 3.0
. Я хочу получить количество строк моего табличного представления из запроса, и для этой цели я использую Alamofire 4.0
.Как получить количество строк из запроса в методе tableView?
Я видел, что возвращать значения из Alamofire
вы должны установить completionHandler
(How to return value from Alamofire), но Xcode не позволяют мне установить его на tableView
метод.
Это код, который я попробовал с набором/получить методы:
var numRows = 0
func setRows(numRows : Int){
self.numRows = numRows
}
func getRows() -> Int{
return self.numRows
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var JSON = [[String : AnyObject]]()
Alamofire.request(url!, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { response in
switch(response.result) {
case .success(_):
JSON = response.result.value as! [[String : AnyObject]]!
self.setRows(numRows: JSON.count)
break
case .failure(_):
print("Error")
break
}
}
return self.getRows()
}
, но я не могу заставить его работать. Я знаю, что запрос Alamofire является асинхронным и является проблемой, с которой я столкнулся, но я не могу установить завершение функции Handler по функции tableView
.
PS: Я также попытался сделать синхронную Alamofire (making an asynchronous alamofire request synchronous), но завершение блока появляется снова, и я не в состоянии установить его метод Tableview (я не знаю, если это возможно, чтобы установить его на этом методе или я делаю это неправильно).
Я попытался добавить completion:(Int) -> Void
в мой метод tableView, но Xcode не позволяет мне это делать.
Что мне сделать, чтобы задать количество строк после выполнения запроса?
Заранее благодарен!
return 0 и когда обработчик завершения называется set your rows –