AlamoFire GET API-Anfrage funktioniert nicht wie erwartet
Ich versuche zu lernen, wie zu verwenden AlamoFire und ich bin Probleme.
Meine Methode so weit ist wie folgt:
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
}
Diese gibt es nil zurück, das ist ein problem. Von was ich gelesen habe hierist dies, weil die Anfrage eine Weile dauern kann, so dass die Schließung nicht auszuführen, bis nach der Rückkehr. Die vorgeschlagene Lösung verschiebt die Rückkehr in die Schließung funktioniert bei mir nicht und der compiler nur schreit (hinzufügen ->String
nach (request,response,JSON,error)
was "'String' ist kein Subtyp von void"). Das gleiche gilt für die andere Lösung.
Irgendwelche Ideen? Sogar einige source-code, der nicht im Zusammenhang mit diesem problem, das nutzt AlamoFire, wäre hilfreich.
Dank!
InformationsquelleAutor der Frage boidkan | 2014-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Weise zu behandeln, ist die übergabe einer closure (I in der Regel nennen es eine
completionHandler
) auf IhrersiteInfo
Funktion und rufen, dass im innerenAlamofire.request
's Verschluss:Dann rufen Sie es wie folgt aus (vergessen Sie nicht, Fehlerbehandlung):
In die Kommentare, die Sie fragte:
Können Sie das Ergebnis der get-Anfrage an eine Instanz-variable in deiner Klasse aus dem inneren der Schließung; es gibt nichts über die Schließung hindert Sie, das zu tun. Was Sie tun aus es hängt wirklich davon ab, gut, was wollen Sie mit den Daten tun.
Wie wäre es mit einem Beispiel?
Da es aussieht wie Sie werden immer ein Zugriff auf die Schlüssel bilden, die get-Anforderung, vielleicht brauchen Sie, für künftige Anfragen in anderen Funktionen.
In diesem Fall, können Sie etwas wie das hier tun:
Hinweis: Asynchrone Programmierung ist ein großes Thema; viel zu viel Abdeckung hier. Dies ist nur ein Beispiel dafür, wie Sie die Daten verarbeitet, die Sie wieder von Ihrem asynchrone Anfrage.
Mit, dass das setup aufrufen
somethingNeedingAccessKey()
ersten mal wird der Auslöser einer Anforderung zum erhalten von Zugriff-Taste. Alle AnrufesomethingNeedingAccessKey()
nach, dass der Wert bereits gespeichertself._accessKey
. Wenn Sie den rest dersomethingNeedingAccessKey
's Arbeit innerhalb der closure übergeben werden, umgetAccessKey
können Sie sicher sein, dass IhreaccessKey
wird immer gültig sein. Benötigen Sie eine andere Funktion, die BedürfnisseaccessKey
schreiben Sie einfach den gleichen WegsomethingNeedingAccessKey
geschrieben.InformationsquelleAutor der Antwort Mike S