Поскольку матовый указывает, Alamofire возвращает данные асинхронно через шаблон completionHandler
, поэтому вы должны сделать то же самое. Вы можете не просто return
значение сразу, но вместо этого вы хотите использовать возвращаемый тип Void
и вместо этого использовать шаблон закрытия обработчика завершения.
В Swift 3 и Alamofire 4 это может выглядеть так:
func getOrders(completionHandler: @escaping (NSDictionary?, Error?) -> ()) {
makeCall("orders", completionHandler: completionHandler)
}
func makeCall(_ section: String, completionHandler: @escaping (NSDictionary?, Error?) -> ()) {
let params = ["consumer_key":"key", "consumer_secret":"secret"]
Alamofire.request("\(apiUrl)/\(apiEndPoint + section)", parameters: params)
.authenticate(user: consumerKey, password: consumerSecret)
.responseJSON { response in
switch response.result {
case .success(let value):
completionHandler(value as? NSDictionary, nil)
case .failure(let error):
completionHandler(nil, error)
}
}
}
Затем, когда вы хотите вызвать его, вы используете этот параметр completionHandler
(если хотите, в закрытии закрытия):
let api = API()
api.getOrders() { responseObject, error in
// use responseObject and error here
print("responseObject = \(responseObject); error = \(error)")
return
}
// but don't try to use them here