有沒有辦法從ViewController(UITableViewController)外部調用alamofire發出的請求,然後用來自響應的數據填充tablewView?現在我在控制器內部創建了一個func,並在獲取數據後調用tablewView的reloadData()。但有沒有什麼辦法可以創建這樣的方法:來自外部的Alamofire請求ViewController
class InsuranceServices {
class func getContracts(table : UITableView) -> [Contract] {
var contracts = [Contract]()
let headers : HTTPHeaders = [
"Content-Type":"application/json"
]
let params : Parameters = [String:Any]()
Alamofire.request("http://test:9090/testService/getContracts", method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers).validate().responseJSON(completionHandler: {response -> Void in
switch response.result {
case .success(let value):
let json = JSON(value)
for data in json["data"].arrayValue {
let contract = Contract(json: data)
print(contract.fullName!)
contracts.append(contract)
}
case .failure(let error):
print(error)
}
table.reloadData()
})
return contracts
}
}
這種方法不適用於我。也許有另一種方式?我認爲在控制器內創建服務方法是不正確的。
噢我的上帝,我完全忘了@escaping。在控制器端,我用這種方式調用了這個func: InsuranceServices.getContracts(completionHandler:{data in self.contracts = data self.tableView.reloadData() })並且工作。多謝! –
因爲像你提到的那樣是'@ escaping',你應該避免堅持'self'。設想一種情況,你解散了視圖控制器,並且稍後請求返回 - 即使你已經解散了屏幕,自己也會留在內存中。爲了避免這種情況,你應該對自己持有「弱」的提法。我用電話編輯了我的答案...... –