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!
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!
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.