Um auf die großen Punkte @dasblinkenlight und @ Sulthan haben gemacht - hier ist ein kleines Beispiel dafür, wie Sie Ihre Anfrage-Funktion erreichen können, um eine Erfolgs- und Misserfolgsschließung in der bequemen Syntax, die Sie wollen.
Zuerst müssen Sie eine neue Klasse definieren, die den 'Ergebnishandler' darstellt. Dies sind die Funktionen success
und failure
, die Ihnen erlauben, mehrere abschließende Schließungen hinzuzufügen, um Ihre Logik für den Abschlussblock zu erstellen. Sie möchten, dass es in etwa so aussieht:
Damit können Sie mehrere erfolgreiche oder fehlgeschlagene Schließungen definieren, die nach Abschluss ausgeführt werden. Wenn Sie nicht die Kapazität für mehrere Closures benötigen, können Sie die Klasse vereinfachen, indem Sie die Arrays entfernen - und stattdessen nur die zuletzt hinzugefügten Blöcke für Erfolgs- und Fehlervervollständigung verfolgen.
Nun müssen Sie nur noch eine Funktion definieren, die eine neue ResultHandler
-Instanz generiert und dann eine bestimmte asynchrone Anfrage ausführt, wobei die invokeCallbacks
-Methode nach Abschluss aufgerufen wird:
Jetzt kannst du es so nennen:
%Vor% Beachten Sie nur, dass Ihre doSomethingAsynchronous
-Funktion ihren Completion-Block zurück zum Hauptthread schicken muss, um Thread-Sicherheit zu gewährleisten.
Vollständiges Projekt (mit einem Beispiel für die Verwendung): Ссылка
Um zu verstehen, was vor sich geht, würde es helfen, Ihren Code ohne die "Bequemlichkeits" -Syntax neu zu schreiben, die Sie Klammern weglassen können, wenn eine Schließung der letzte Parameter einer Funktion ist:
%Vor%Dies macht die Struktur des Codes hinter dieser API klarer:
getListForID
muss ein Objekt sein Success
und Failure
*
Success
als auch Failure
müssen einen einzigen Parameter vom Schließungstyp Success
als auch Failure
müssen self
zurückgeben
* Das Objekt könnte nur Success
function haben und ein anderes Objekt mit einer einzigen Failure
-Funktion zurückgeben, aber dann wäre es nicht möglich, die Success
neu zu ordnen. und Failure
handlers oder drop Success
handler zusammen.
Tags und Links ios swift method-chaining