- 코드에서 사용되고 전달될 수 있는 기능이 자체 포함된 블록
- 일급객체이다(일급객체는 전달인자로 사용할 수 있고 변수/상수 등으로 저장하거나 전달할 수 있으며 함수의 반환값이 될 수도 있다.
- 참조타입이다.
- 함수는 이름이 있는 클로저이다.
일반적인 표현방법은 다음과 같다.
{ (parameters) -> return type in
statements
}
참고. 함수로 정의된 형태가 아닌 인자로 들어가 있는 형태의 클로저를 inline closures라고 한다.
reversedNames = names.sorted(by: { (s1: String, s2: String) -> Bool in return s1 > s2 } )
sorted(by:)의 메소드에서 이미 String타입 2개가 들어와서 Bool타입이 반환되는 것을 알기 때문에 타입 생략
reversedNames = names.sorted(by: { s1, s2 in return s1 > s2 } )
단일 표현 클로저에서는 반환 키워드를 생략할 수 있다.
reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )
swift는 인라인 클로저에 자동으로 축약 인자 이름을 제공하는데 이 인자를 사용하면 인자 값을 순서대로 $0, $1, $2 등으로 사용할 수 있다. 축약 인자 이름을 사용하연 인자 값과 그 인자로 처리할 때 사용하는 인자가 같다는 것을 알기 때문에 인자를 입력받는 부분과 in 키워드 부분을 생략할 수 있다.
reversedNames = names.sorted(by: { $0 > $1 )
Swift의 String타입 연산자에는 String끼리 비교할 수 있는 비교연산자가 구현되어있어서 축약이 가능하다.
reversedNames = names.sorted(by: >)