J'essaie de faire une demande synchrone en utilisant Alamofire
. J'ai regardé Stackoverflow et j'ai trouvé cette question: making an asynchronous alamofire request synchronous.Comment faire une requête synchrone avec Alamofire?
J'ai vu que la réponse acceptée utilise completion
pour faire Alamofire
demande synchrone mais je ne peux pas le faire fonctionner. Ceci est mon code simplifié:
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)
}
Avec ce code, je reçois une erreur en essayant de faire completion(bool value)
. L'erreur que je reçois est la suivante:
ne peut pas appeler valeur de type non-fonction « Bool »
J'ai essayé d'utiliser beaucoup d'exemples en utilisant la fin pour obtenir les valeurs de manière synchrone (parce que J'ai besoin de récupérer les données avant de les montrer sur une table et en même temps obtenir le nombre de lignes de cette table) sans succès. Comment utiliser cette complétion pour obtenir une réponse synchrone?
Merci d'avance!
Je vous recommande d'implémenter votre propre méthode. Apple a fortement déconseillé les appels réseau synchrones. Jetez un oeil à ceci: http://stackoverflow.com/questions/31557688/synchronous-url-request-on-swift-2 – FredLoh
https://github.com/Alamofire/Alamofire/issues/1147, vous devez voir ce blog. J'espère que cela vous aidera. –
Il semble que vous ne compreniez pas comment les méthodes asynchrones fonctionnent, en particulier avec les rappels d'achèvement. Au lieu de forcer les appels synchrones, investissez cet effort dans la compréhension de la programmation asynchrone. – vikingosegundo