Sie haben Recht mit den ersten beiden Erklärungen.
Die letzte ist ein bisschen seltsam, weil Alamofire Response-Serializer tut. Sie können die Kette mehrere Serializer wie folgt aus:
Alamofire.request(myRequest)
.responseString { // handle response as string }
.responseArray { // handle response as array }
Wenn dieser Code aufgerufen wird, das ist, was passiert:
Alamofire.request(myRequest)
die Anfrage und eine Warteschlange für Handler
.responseString
& .responseArray
erhalten ihre Antwort Serializer schafft zur Warteschlange hinzugefügt
- Der Netzwerkanruf passiert
- Wenn ich Ist das erledigt (ob es fehlschlägt oder erfolgreich ist), ruft die Warteschlange alle Antwort-Serialisierer auf, die hinzugefügt wurden (z. B.
.responseString
)
- Wenn jeder Serializer ausgeführt wird, kann der Beendigungshandler verwendet werden, um Ergebnisse "zurückzugeben" an den Aufrufer (die es nicht direkt tun, weil es async ist) würde
Dieser Code funktioniert (fast) das gleiche:
let manager = Alamofire.Manager.sharedInstance
manager.startsRequestImmediately = false
let alamofireRequest = manager.request(myRequest)
alamofireRequest.responseString { // handle response as string }
alamofireRequest.responseArray { // handle response as array }
alamofireRequest.resume()
Aber manager.startsRequestImmediately = false
bedeutet, dass das Netzanruf nicht bekommt angefangen bis alamofireRequest.resume()
ist calle d. Es ist standardmäßig true
, daher müssen alle Antwort-Serializer als Teil derselben Anweisung wie manager.request(myRequest)
hinzugefügt werden.
let alamofireRequest = manager.request(myRequest)
alamofireRequest.responseString { // handle response as string }
alamofireRequest.responseArray { // handle response as array }
Um dies:
let alamofireRequest = manager.request(myRequest)
.responseString { // handle response as string }
.responseArray { // handle response as array }
Und wenn wir manager.startsRequestImmediately = true
verwenden, dann müssen wir nicht die lokale var für die Anfrage
Da die Antwort Serializer selbst zurückkehren, können wir dies verkürzen überhaupt (da wir alamofireRequest.resume()
nicht anrufen müssen):
manager.request(myRequest)
.responseString { // handle response as string }
.responseArray { // handle response as array }
Werfen Sie einen Blick auf diese Antwort http : //stackoverflow.com/a/33200294/1422333 –