Verschlüsse Rückgabewert (zuvor completionBlock)

8

Ich möchte einige Werte zurückgeben, nachdem die Langzeitoperation abgeschlossen ist. Aber außerdem möchte ich die Logik und die GUI teilen.

Zum Beispiel; Ich habe zwei Klassen

  1. SomeServices.swift mit einer Methode namens "getDataFromService ..."
  2. MyTableViewController.swift, welches das Ergebnis von "getDataFromService"
  3. anzeigt

Also, vorher in Objective-C habe ich einfach eine Methode in SomeServices wie folgt hinzugefügt:

%Vor%

In dieser Methode habe ich gerade completionBlock(myData, myError) aufgerufen, um meine Werte an den tableviewcontroller zurückzugeben.

Was wäre die äquivalente Schließung, die ich in SomeServices.swift definieren muss und wie wird es in MyTableViewController aufgerufen?

Ich kann eine einfache Schließung wie diese nennen:

%Vor%

Aber ich habe keine Ideen, wie man einen Abschluss mit einem completionBlock-Äquivalent definiert.

Jede Hilfe wäre willkommen

    
user1011394 04.06.2014, 07:04
quelle

3 Antworten

12

Das Plus an Schließungen ist, dass Sie alles weitergeben können, was Sie wollen. Methoden oder Funktionen - spielt keine Rolle.

Sie können eine Funktion innerhalb der Parameter übergeben und sie einfach aufrufen.

%Vor%

Auszug aus: Apple Inc. "Die schnelle Programmiersprache." iBooks. Ссылка

    
Sam 04.06.2014, 07:20
quelle
2

Die Antwort finden Sie im Sprachführer:

Angenommen, Sie möchten einen String zurückgeben. Dies ist die Syntax

%Vor%

Hier ist ein Beispiel, das zwei Zeichenfolgen verwendet und sie verkettet und das Ergebnis zurückgibt:

%Vor%

Dann können Sie Folgendes tun:

%Vor%     
Kaan Dedeoglu 04.06.2014 07:22
quelle
1

So benutze ich einen Singleton ServiceManager, um dies zu erreichen.

%Vor%

Unten ist das Beispiel, wie ich die Singleton-Klasse verwende.

%Vor%

Ich hoffe, das hilft jedem, der nach der gleichen Lösung sucht.

    
caffieneToCode 09.08.2017 14:23
quelle

Tags und Links