ViewController(UITableViewController)の外部からalamofireによるリクエストを呼び出し、responseからのデータをtablewViewに取り込む方法はありますか?今私はコントローラ内でfuncを作成し、データをフェッチした後にtablewViewのreloadData()を呼び出します。しかし、このようなメソッドを作成する方法はありますか:外部からのAlamofireリクエスト
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
}
}
このメソッドは私のために働いていません。多分別の方法がありますか?私はコントローラ内の作成サービスメソッドが間違っていると思います。
私の神、私は@エスケープについて完全に忘れています。コントローラ側では、次のようにこのfuncを呼び出しました。 InsuranceServices.getContracts(completionHandler:{ のデータ、self.contracts = data のself.tableView.reloadData() })これが機能しました。ありがとう! –
あなたが言及したように '@エスケープ 'なので、あなたは' self'を保持しないでください。 View Controllerを却下した後、リクエストが返ってくる状況を想像してみてください。画面を閉じたとしても、selfはメモリに残ります。それを避けるためには、自己への「弱い」参照を保持する必要があります。私は電話で自分の答えを編集しました... –