Verschluss ist nur eine Funktion mit den Parametern in den Klammern bewegt verwenden können, mit dem Schlüsselwort in
, um die Parameter vom Funktionskörper zu trennen. Die beiden folgenden Beispiele definieren äquivalente Funktionen:
func myFunc(number: Int) -> Int {
let result = 3 * number
return result
}
let myClosure = { (number: Int) -> Int in
let result = 3 * number
return result
}
Sie können sie tatsächlich rufen beide auf genau die gleiche Art und Weise:
let x = myFunc(2) // x == 6
let y = myClosure(2) // y == 6
Beachten Sie, wie das zweite Beispiel ist genau die gleiche wie die erste, nur in der Im ersten Beispiel liegen die Parameter (number: Int) -> Int
außerhalb der Klammern, und im zweiten Beispiel befinden sich die Parameter innerhalb der Klammern, gefolgt vom Schlüsselwort in
.
map
Werke durch eine Anordnung unter (numbers
, im Beispiel), und ein neues Array zu schaffen, das das Ergebnis des Anwendens des Verschlussfunktion auf jedes Element in numbers
ist. Wenn also numbers
[1, 2, 3]
ist, beginnt das obige Beispiel mit 1
. Es wird die Closure-Funktion anwenden, die eine 3
erzeugt (weil alles, was es tut, das Element aus dem ersten Array mit 3 multipliziert). Dies geschieht für jedes Element in numbers
, bis es ein neues Array erzeugt, [3, 6, 9]
.
Wenn Sie möchten, können Sie map
unter Verwendung der Namen der obigen Funktion oder des obigen Abschlusses aufrufen oder indem Sie es explizit innerhalb von map
ausschreiben. Alle der folgenden Beispiele vollständig äquivalent sind:
let numbers = [1, 2, 3]
// Example 1
let times3 = numbers.map(myFunc) // times3 == [3, 6, 9]
// Example 2
let timesThree = numbers.map(myClosure) // timesThree == [3, 6, 9]
// Example 3
let xThree = numbers.map({ (number: Int) -> Int in
let result = 3 * number
return result // xThree == [3, 6, 9]
})
zu beachten, dass Beispiel 3 Die gleichen wie in Beispiel 2, nur in Beispiel 3 der Verschluss innerhalb der map
explizit dargelegt, wohingegen in Beispiel 2 der Verschluss zugewiesen wurde auf eine Konstante namens myClosure
, und die Konstante wurde map
geliefert.
Hoffe, das hilft - Schließungen sind lustig, aber verwirrend.
Dies ist auch eine gute Einführung in Verschlüsse in Swift: http: //letvargo.mooo.com/a-beginners-guide-to-closures-in-swift/) –