Nein, es gibt keinen Unterschied zwischen diesen beiden Blöcken.
Es ist ein Teil von Swifts Fähigkeit, Verschlüsse zu akzeptieren, die als ein Argument nach den Funktionsknüppeln bereitgestellt werden.
NB: Diese Antwort und ihre Beispiele sind in Swift 3 geschrieben, aber die Syntax für Swift 2 sollte ähnlich sein.
Betrachten Sie die folgende Situation:
func a(callback: (_ s: String) -> Void) {
callback(s: "hello there")
}
Diese Funktion kann entweder, ähnlich wie Ihre Schnipsel ausgedrückt werden:
a(callback: { str in
print(str) // prints "hello there"
})
oder
a() { str in
print(str) // also prints "hello there"
}
Verschlüsse mit ähnlichem Verhalten sind gesehen in anderen Funktionen/Methoden, die Schließung erfordern s wie autoreleasepool
, Versand und URLConnection
. Von einem persönlichen Standpunkt aus benutze ich fast immer das erste Beispiel, da es besser lesbar ist.
Lesen Sie * Trailing Closures * in [Swift Language Guide - Closures] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html) – vadian