J'ai un petit problème avec mon code rapide. L'instruction return de fin s'exécute avant que la valeur JSON ne soit stockée, de sorte qu'elle continue à me donner zéro. Comment puis-je faire le retour après que la valeur a été reçue?La déclaration de retour retourne avant que l'information ne soit reçue
func getArticleInfo(Id: String) -> String {
let url = val1 + val2 + val3
Alamofire.request(.GET, url).responseJSON { response in
switch response.result {
case .Success:
if let value = response.result.value {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
let json = JSON(value)
let singleAsset = json["url"].string
}
}
case .Failure(let error):
print(error)
}
}
return singleAsset
}
Merci pour l'aide l'autre problème que j'ai. VOIR CI-DESSOUS J'essaie d'obtenir les catégories à remplir avec toutes les informations, puis appelez le vc.displayCatName() après son fait. Mais il le fait tard et je dois rafraîchir la page avant que je puisse voir l'information. Au-dessus, il suffit d'assigner les valeurs JSON aux touches qui peuplent les catégories ci-dessous. Mais vc.displayCatName() est une fonction d'un autre contrôleur de vue, mais il est exécuté avant que les valeurs de catégorie ne soient remplies. Donc, la seule façon dont je vois les valeurs est si je rafraichis la page manuellement en utilisant le Pull to Refresh. Donc, je veux les informations à être rempli alors vc.displayCatName() devrait fonctionner
self.getAsset(id!) { (result) -> Void in
print("this is result \(result)")
let categories = Categories (categoryName: catName, imageId: id, catIdNumber: catIdNumber, imageUrl: result)
vc.cats.append(categories)
}
}
}
dispatch_async(dispatch_get_main_queue()) {
vc.displayCatName()
}
}
Pourquoi avez-vous besoin d'utiliser 'dispatch_async' lorsque vous êtes déjà dans un bloc de completionHandler asynchrone? –
Hmm vous avez un point. Alors devrais-je simplement supprimer l'envoi? – Slygoth
Oui, car cela ne sert à rien. – FredLoh