Swift - Methodenverkettung

8

Ich möchte die Verkettung von Methoden in meinem swift -Code implementieren, wahrscheinlich in Alamofire -Methoden. Zum Beispiel, wenn ich meine Funktion wie folgt verwenden muss

%Vor%

Wie würde ich die Funktion getListForID erstellen?

    
iOS 09.05.2016, 11:07
quelle

2 Antworten

7

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:

%Vor%

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:

%Vor%

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): Ссылка

    
Hamish 09.05.2016, 14:22
quelle
5

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:

  • Der Rückgabewert von getListForID muss ein Objekt sein
  • Das Objekt muss zwei Funktionen haben: Success und Failure *
  • Sowohl Success als auch Failure müssen einen einzigen Parameter vom Schließungstyp
  • verwenden
  • Sowohl 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.

    
dasblinkenlight 09.05.2016 11:21
quelle

Tags und Links