我在我的 Swift 3.0
项目上使用 tableViewController
。我想从请求中获取 tableview 的行数,为此我正在使用 Alamofire 4.0
。
我看到要从 Alamofire
返回值,你必须设置一个 completionHandler
( How to return value from Alamofire ) 但 Xcode 不允许我在 tableView< 上设置它
方法。
这是我尝试使用 set/get 方法的代码:
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 请求是异步的,这是我面临的问题,但我无法在 tableView
函数上设置 completionHandler。
P.S: 我也曾尝试制作同步 Alamofire ( making an asynchronous alamofire request synchronous ) 但再次出现完成 block 并且我无法将其设置为 tableView 方法(我不知道是否可能将其设置为该方法,否则我以错误的方式进行设置)。
我已经尝试将 completion:(Int) -> Void
添加到我的 tableView 方法中,但 Xcode 不允许我这样做。
请求后如何设置行数?
提前致谢!
最佳答案
我正在做这样的事情:
将在 tableView 中的项目表
var positionsTable = [[String : AnyObject]]()
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return positionsTable.count
}
根据请求我获取项目并重新加载 tableView
Alamofire.request(.GET, url, headers: headers, encoding: .JSON)
.responseJSON { (response) in
print(response)
self.positionsTable = response.result.value
self.tableView.reloadData()
}
}
关于ios - 如何从 tableView 方法中的请求中获取行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39700209/