2016-06-15 4 views

답변

1

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(<) 

이 명시 적으로 우리 자신의 폐쇄 주위 포장하지 않고, 기능 (이름 폐쇄) 직접에서 <를 전달합니다. 다른 말했듯

+0

내 놀이터에 문제가있었습니다. 작동하도록했습니다. 감사 :) – Dershowitz123

0

연산자 오버로딩 :

func == (i : Int, j: Int) -> Bool { 
    return i == j 
} 

그와 동등합니다.

+0

내가 이해하지 못하는 것 같습니다. 설명해 주시겠습니까? – Dershowitz123

1

이것은 실제로 클로저가 아니며 변수에 저장된 두 정수를 비교하는 항등 연산자입니다.

모든 연산자는 함수를 사용하여 정의되며 해당 함수를 변수에 할당 할 수 있습니다. 거기에는 다른 것이 없습니다.

+0

이 기법을 사용하여 수행 할 수있는 모든 작업에 대한 데모를 보여 주시겠습니까?이 코드를 코드에 사용하는 것이 좋습니다. – Dershowitz123

+0

제대로 작동합니다. 고맙습니다. :) – Dershowitz123

0

, 그것의 약어 형태이다 : 오른쪽에서 왼쪽으로 판독

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 } 

은 스위프트를 즐길 수 :)

관련 문제