2016-03-22 21 views
23
let sortedNumbers = numbers.sort { $0 > $1 } 
print(sortedNumbers) 

Czy ktoś może wyjaśnić, co oznacza $0 i $1 w szybkim tempie?

więcej przykładowych

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

Odpowiedz

35

$0 jest pierwszym parametrem przekazywane do zamknięcia. $1 to drugi parametr, itd. To zamknięcie pokazałeś jest skrótem dla:

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

mogę napisać własną logikę w zamknięciu stosując pierwszy parametr i drugi? –

+3

Tak, to cała celem zamknięcia. – AdamPro13

+1

dzięki kolego, twoja odpowiedź pomogła mi zrozumieć większą część zamknięć –

2

odnoszą się do pierwszego i drugiego rodzaju argumenty. Tutaj sort porównuje 2 elementy i zamówić je. Można patrzeć Swift official documentation o więcej informacji:

Swift automatycznie zapewnia nazwy argumentów skrótowym do inline zamknięć, które mogą być używane w odniesieniu do wartości zamknięcia za argumentów przez nazwy $ 0, $ 1, $ 2, i tak dalej.

1

Jest skrócone nazwy argumentów.

Swift automatycznie podaje skrócone nazwy argumentów do wstawiania zamknięć, które mogą być używane do odnoszenia się do wartości argumentów zamknięcia przez nazwy $ 0, 1 $, 2 $ i tak dalej.

Jeśli używasz tych skrótowych nazw w wyrażeniu zamknięcia, możesz pominąć listę argumentów zamknięcia z jego definicji, a liczba i typ skrótowych nazw będzie wywnioskowana z oczekiwanego typu funkcji. In hasła można również pominąć, ponieważ wyrażenie zamknięcie składa się w całości z jego ciała:

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

Tutaj $ 0 oraz $ 1 dotyczą pierwszych i drugich argumentów strunowe zamknięcie jest.

10

Przedstawia argumenty osłabieniu wysłane do zamknięcia, w tym przykładzie rozbiciu:

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

Ponieważ operator dodawania ma ten sam podpis funkcja, jak zamknięcia, można przełamać to jeszcze po prostu: 'dodać = (+)' – Samah