我在我的Swift 3.0
項目中使用了tableViewController
。我想從請求中獲取我的tableview的行數,我正在使用Alamofire 4.0
。如何從tableView方法的請求中獲取行數?
我看到從Alamofire
返回值,你必須設置一個completionHandler
(How to return value from Alamofire),但Xcode中不要讓我把它放在tableView
方法。
這是我與集嘗試代碼/ 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。
PS:我也試圖讓同步Alamofire(making an asynchronous alamofire request synchronous),但完成塊再次出現,我不能將它設置爲的tableView方法(我不知道是否有可能將其在該方法或者我以錯誤的方式進行)。
我曾嘗試將completion:(Int) -> Void
添加到我的tableView方法,但Xcode不允許我這樣做。
在做出請求後應該如何設置行數?
在此先感謝!
返回0並且完成處理程序被調用時設置行 –