는 다음과 낭비 바이트 않고,이 울트라 인색 위해, 마지막으로 Here이러한 유형의 폐쇄가 의미하는 바는 무엇이며 어떻게 작동합니까?
에서 궁극적 인 폐쇄 을 알았어요.
let testEquality9 : (Int, Int) -> Bool = (==)
는 다음과 낭비 바이트 않고,이 울트라 인색 위해, 마지막으로 Here이러한 유형의 폐쇄가 의미하는 바는 무엇이며 어떻게 작동합니까?
에서 궁극적 인 폐쇄 을 알았어요.
let testEquality9 : (Int, Int) -> Bool = (==)
func
키워드로 데칼 한 기능은 이름이있는 클로저에 불과합니다. ==
은 이러한 명명 된 함수의 예입니다. 그것은 2 Int
의 논증을 취하고 그들이 동등한지를 알려주는 Bool
을 반환합니다. 유형은 (Int, Int) -> Bool
입니다. testEquality9는 폐쇄 형이며, 유형은 (Int, Int) -> Bool
입니다. 여기에는 ==
함수의 종료가 지정됩니다.
는 그것은 다음과 같이 호출 할 수 있습니다
testEquality9(1, 2) // false
testEquality9(1, 1) // true
중요한 것은이 기능은 정말 폐쇄 점이다에서 그릴, 그래서 그들은 폐쇄가 사용할 수있는 모든 곳에서 사용할 수 있습니다. 당신은 int 배열을 정렬하려는 경우
예를 들어, 당신은 사용할 수 있습니다
let ints = [3, 1, 4, 2]
let sorted = ints.sort{$0 < $1}
sort(_:)
방법은 유형 (Int, Int) -> Bool
의의 폐쇄를합니다. 폐사 {$ 0 < $ 1}는 2 Int
개의 매개 변수를 사용하고 Bool
을 반환합니다. 그래서 그것은 서명에 들어 맞습니다.
그러나이 코드를 더 짧게 만들 수 있습니다. <
운영자의 기능이 이미 (Int, Int) -> Bool
을 입력 가지고 있기 때문에, 우리는이를 작성할 수 있습니다
let sorted = ints.sort(<)
이 명시 적으로 우리 자신의 폐쇄 주위 포장하지 않고, 기능 (이름 폐쇄) 직접에서 <
를 전달합니다. 다른 말했듯
연산자 오버로딩 :
func == (i : Int, j: Int) -> Bool {
return i == j
}
그와 동등합니다.
내가 이해하지 못하는 것 같습니다. 설명해 주시겠습니까? – Dershowitz123
이것은 실제로 클로저가 아니며 변수에 저장된 두 정수를 비교하는 항등 연산자입니다.
모든 연산자는 함수를 사용하여 정의되며 해당 함수를 변수에 할당 할 수 있습니다. 거기에는 다른 것이 없습니다.
이 기법을 사용하여 수행 할 수있는 모든 작업에 대한 데모를 보여 주시겠습니까?이 코드를 코드에 사용하는 것이 좋습니다. – Dershowitz123
제대로 작동합니다. 고맙습니다. :) – Dershowitz123
, 그것의 약어 형태이다 : 오른쪽에서 왼쪽으로 판독
let testEquality9: (Int, Int) -> Bool = { (a: Int, b: Int) -> Bool in return a == b }
, 두 개의 INTS을 비교하고 상수 testEquality9에 대입하는 함수를 생성한다.
당신은 정신적으로 3 개를 분리 할 필요가:
상수 이름 : 할당
(Int, Int) -> Bool
그리고 값 :
let testEquality9
일정한 유형 (이 함수 유형의) 상수 :
(==)
OR, 긴 버전 :
{ (a: Int, b: Int) -> Bool in return a == b }
은 스위프트를 즐길 수 :)
내 놀이터에 문제가있었습니다. 작동하도록했습니다. 감사 :) – Dershowitz123