2016-03-22 7 views
23

Kann jemand erklären, was $0 und $1 bedeutet in swift?

Weiteres Beispiel

array.forEach { 
    actions.append($0) 
} 

Antwort

35

$0 ist der erste Parameter in den Verschluss geführt. $1 ist der zweite Parameter usw. Das Verschluss Sie ist eine Abkürzung zeigte:

let sortedNumbers = numbers.sort { (firstObject, secondObject) in 
    return firstObject > secondObject 
} 
+0

Kann ich meine eigene Logik in einem Verschluss unter Verwendung der ersten Parameter und dem zweiten schreiben? –

+3

Ja, das ist der ganze Zweck der Schließung. – AdamPro13

+1

Dank Kumpel, Ihre Antwort hat mir geholfen, den besseren Teil der Closures zu verstehen –

2

Die auf den ersten und zweiten Argumente Art beziehen. Hier vergleicht sort 2 Elemente und sortiert sie. Sie können Swift official documentation für weitere Informationen sehen:

Swift automatisch Stenografie Argumentnamen bietet Verschlüsse Inline, die auf den Werten der Argumente der Schließung durch die Namen beziehen verwendet werden können, auf $ 0, $ 1, $ 2, und so weiter.

1

Es ist ein Kürzel Argumentnamen.

Swift stellt Inline-Closures automatisch Abkürzungsargumentnamen zur Verfügung, die verwendet werden können, um auf die Werte der Argumente des Abschlusses mit den Namen $ 0, $ 1, $ 2 usw. zu verweisen.

Wenn Sie diese Kurzschreibargumentnamen in Ihrem Closure-Ausdruck verwenden, können Sie die Argumentliste des Closings aus der Definition auslassen, und die Nummer und der Typ der Kurzschreibargumentnamen werden aus dem erwarteten Funktionstyp abgeleitet. Die in Schlüsselwort kann auch weggelassen werden, da die Schließung Ausdruck vollständig aus seinem Körper aus:

reversed = names.sort({ $0 > $1 }) 

Hier $ 0 und $ 1 beziehen sich auf die ersten und zweiten String Argumente der Schließung.

10

Es stellt shorthanded Argumente in einen Verschluss gesendet, dieses Beispiel bricht es:

Swift 4:

var add = { (arg1: Int, arg2: Int) -> Int in 
    return arg1 + arg2 
} 
add = { (arg1, arg2) -> Int in 
    return arg1 + arg2 
} 
add = { arg1, arg2 in 
    arg1 + arg2 
} 
add = { 
    $0 + $1 
} 

let result = add(20, 20) // 40 
+1

Da der Additionsoperator die gleiche Funktionssignatur wie dieser Closure hat, können Sie ihn noch weiter reduzieren: 'add = (+)' – Samah

Verwandte Themen