Richtet den Selbstbezug in dispatch_async richtig ein

8

Wie kann ich mich selbst in einer schnellen Schließung richtig beziehen?

%Vor%

Ich bekomme den Fehler:

Cannot convert the expression's type 'Void' to type 'UIViewController!"

Nach dem Zufallsprinzip habe ich versucht:

%Vor%

und es hat funktioniert. Nicht sicher, was das extra () tut! Wer möchte es erklären? Danke!

    
LB. 22.06.2014, 01:03
quelle

2 Antworten

4

Dies ist das gleiche Problem wie die Leute bei diesen Fragen:

Was mache ich in Swift falsch, um diesen Objective-C-Block / API-Aufruf aufzurufen?

animateWithDuration: Animationen: Abschluss: in Swift

Hier ist die allgemeine Idee:

Aus dem Swift-Buch: Ссылка

Eine der Optimierungen von Closures ist:

  

Implizite Rückgabe von Closures für einzelne Ausdrücke

Wenn Sie also nur eine Zeile in Ihrem Abschluss haben, ändert sich der Rückgabewert des Abschlusses. In diesem Fall gibt popViewController den aufgerufenen View-Controller zurück. Durch Hinzufügen von () zum Closure, haben Sie es nur zu einem 2-Zeilen-Closure gemacht und der Rückgabewert ist nicht mehr implizit!

    
Jack 22.06.2014 02:02
quelle
0

Ich habe vor ein paar Tagen so etwas zu einem verwandten Thema re: Swifts "impliziter Rückgabewert für die Schließung eines einzelnen Ausdrucks" beantwortet: animateWithDuration: Animationen: Vervollständigung: in Swift

In diesem Fall gibt die Methode popViewControllerAnimated den UIViewController zurück, der aus dem Stack abgerufen wurde: ( Ссылка :)

Obwohl Sie mit dem Rückgabewert dieser Methode nicht explizit etwas tun, verwendet Swift diesen Wert (den zurückgegebenen UIViewController) als Rückgabewert für den Abschluss - der Abschluss erwartet jedoch einen Rückgabewert von Void.

Wenn Sie das zusätzliche parens () hinzugefügt haben, haben Sie dem Closure im Wesentlichen eine weitere Zeile hinzugefügt, und da es nicht länger eine 'single-expression closure' ist, gibt es nicht mehr den impliziten UIViewController implizit zurück.

Die Gemeinschaft wird sich schließlich auf eine Konvention einlassen, um damit fertig zu werden, denn jetzt, nachdem ich darauf gestoßen bin, habe ich mich dafür ausgesprochen, am Ende des Abschlusses return () hinzuzufügen (wie es deutlich die Absicht besagt, (1) kurz) die "implizite Rückkehr" durch Hinzufügen einer weiteren Aussage und (2) explizites Zurückgeben des erwarteten Ergebnisses.

    
fqdn 22.06.2014 04:19
quelle

Tags und Links