AlamoFire OBTENIR demande d'api ne fonctionne pas comme prévu
Je vais essayer d'aller apprendre à utiliser AlamoFire et je vais avoir des ennuis.
Ma méthode à ce jour est comme suit:
func siteInfo()->String?{
var info:NSDictionary!
var str:String!
Alamofire.request(.GET, MY_API_END_POINT).responseJSON {(request, response, JSON, error) in
info = JSON as NSDictionary
str = info["access_key"] as String
//return str
}
return str
}
Cela renvoie nil qui est un problème. De ce que j'ai lu ici, c'est parce que la demande peut prendre un certain temps, de sorte que la fermeture ne s'est pas exécuté, jusqu'après le retour. La solution proposée de déplacement de retour dans la fermeture ne fonctionne pas pour moi et le compilateur juste hurle (ajout de ->String
après (request,response,JSON,error)
qui donne ""Chaîne" n'est pas un sous-type de void"). En va de même pour l'autre solution fournie.
Des idées? Même code source qui n'est pas liée à ce problème, qui utilise AlamoFire, serait utile.
Merci!
- avez-vous été en mesure de comprendre comment les données de retour avec alamofire sans un gestionnaire d'achèvement?
Vous devez vous connecter pour publier un commentaire.
Une façon de gérer cela est de passer une fermeture (j'ai l'habitude de l'appeler un
completionHandler
) à votresiteInfo
fonction et l'appel à l'intérieur deAlamofire.request
's fermeture:Ensuite l'appeler comme ceci (n'oubliez pas d'erreur de manipulation):
Dans les commentaires vous avez demandé:
Vous pouvez enregistrer le résultat de la requête get à une variable d'instance de votre classe à partir de l'intérieur de la fermeture; il n'y a rien au sujet de la fermeture de vous empêche de le faire. Ce que vous faites à partir de là dépend vraiment de ce que vous voulez faire avec ces données.
- Il un exemple?
Depuis on dirait que vous êtes obtenir une clé d'accès, formulaire de demande, vous devrez peut-être qu'à l'avenir les demandes faites dans d'autres fonctions.
Dans ce cas, vous pouvez faire quelque chose comme ceci:
Remarque: de la programmation Asynchrone est un vaste sujet; beaucoup trop de couvrir ici. C'est juste un exemple de comment vous pouvez gérer les données que vous obtenez de retour de votre requête asynchrone.
Avec cette configuration, l'appel de
somethingNeedingAccessKey()
la première fois, va déclencher une demande pour obtenir la clé d'accès. Tous les appels àsomethingNeedingAccessKey()
après que va utiliser la valeur déjà stockées dansself._accessKey
. Si vous le reste desomethingNeedingAccessKey
's de travail à l'intérieur de la clôture d'être passée àgetAccessKey
, vous pouvez être sûr que votreaccessKey
sera toujours valide. Si vous avez besoin d'une autre fonction qui doitaccessKey
, il suffit de l'écrire de la même façonsomethingNeedingAccessKey
est écrit.var stuff:String! siteInfo{ str in stuff = str } println(stuff)
Qui imprime néantNSOperationQueue
s bien, vous souhaitez peut-être également à la recherche autour pour un peu plus de lecture générale (je n'ai rien désinvolte, désolé).if accessKey != nil
est sur le thread principal, droit? Donc, il est sûr de définir des variables surself
objet qui pourrait être utilisé par l'INTERFACE utilisateur directement plus tard?