Я пытаюсь выполнить синхронный запрос, используя Alamofire
. Я посмотрел Stackoverflow и нашел этот вопрос: making an asynchronous alamofire request synchronous.Как сделать синхронный запрос с помощью Alamofire?
Я видел, что принятый ответ использует completion
, чтобы сделать Alamofire
запрос синхронно, но я не могу заставить его работать. Это мой упрощенный код:
func loadData(completion: (Bool)) -> (Int, [String], [String], [String]){
Alamofire.request(url!, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { response in
switch(response.result) {
case .success(_):
if let JSON = response.result.value as! [[String : AnyObject]]!{
//Here I retrieve the data
}
completion(true)
break
case .failure(_):
print("Error")
completion(false)
break
}
}
return (numberRows, nameArray, ageArray, birthdayArray)
}
С помощью этого кода я получаю сообщение об ошибке при попытке сделать completion(bool value)
. Ошибка, я получаю следующее:
Можно не называть значение типа без функции «Bool»
Я попытался использовать много примеров использования завершения, чтобы получить значения синхронно (т.к. Мне нужно получить данные, прежде чем показывать их на столе и в то же время получить количество строк этой таблицы) без успеха.
Как использовать это завершение для получения синхронного ответа?
Заранее благодарен!
Я бы порекомендовал вам реализовать свой собственный метод. Apple сильно обескуражила синхронные сетевые вызовы. Взгляните на это: http://stackoverflow.com/questions/31557688/synchronous-url-request-on-swift-2 – FredLoh
https://github.com/Alamofire/Alamofire/issues/1147, вы должны увидеть этот блог. Надеюсь, это поможет вам. –
Кажется, вы не понимаете, как работают асинхронные методы, особенно с обратными вызовами завершения. Вместо того, чтобы форсировать синхронные вызовы, инвестируйте эти усилия в понимание асинхронного программирования. – vikingosegundo