Есть ли способ вызвать запрос alamofire извне ViewController (UITableViewController), а затем заполнить tablewView данными из ответа? прямо сейчас я создал func внутри контроллера, и после извлечения данных просто вызовите reloadData() таблицы tablewView. Но есть ли способ создать такой метод:Запрос 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
}
}
Этот метод не работает для меня. может быть, есть другой способ? Я думаю, что создать методы обслуживания внутри контроллера неверно.
Og my God, я полностью забываю о @ escaping. на стороне контроллера я назвал эту функцию таким образом: InsuranceServices.getContracts (completeHandler: {данные в self.contracts = данные self.tableView.reloadData() }), и это сработало. большое спасибо! –
Поскольку это '@ escaping', как вы упомянули, вам следует избегать« самоутверждения ». Представьте себе ситуацию, когда вы отклонили контроллер вида, и только позже запрос вернется - сам, но останется в памяти, даже если вы отклонили экран. Чтобы этого не произошло, вы должны придерживаться «слабой» ссылки на себя. Я отредактировал свой ответ с вызовом ... –