Swift Closure

Closure ?

사용자 코드 안에서 { } 으로 구분 되어 있는 코드의 블럭이며, 일급 객체의 역할을 할 수 있다.
일급 객체는 전달인자, 변수/상수, 함수의 반환 값 등 여러방면에서 사용할 수 있다.

함수는 클로저의 한 형태로 이름이 있는 클로저를 함수라고 한다.

Ex)

let reverseNames = names.sorted(by: {(s1: String, s2: String) ->
Bool in return s1 > s2})
  • sorted(by:) 의 경우는 이미 (String, String) -> Bool 타입의 인자가 들어오는 것이 정해져 있기 때문에 타입을 생략 할 수 있다.
let reverseNames = names.sorted(by: {s1, s2 in return s1 > s2})
  • 또한 클로져는 인자 값을 축약해서 사용할 수 있다. ($0 부터 순서대로)
    let reverseNames = names.sorted(by: { $0 > $1 })
  • 인자로 클로저 넣기가 길다면 후행 클로저를 사용하여 함수 뒤에 표현할 수 있다.
  • 마지막 인자가 클로저이고, 후행 클로저를 사용하면 ( ) 를 생략할 수 있다.
    let reversedNames = names.sorted { $0 > $1 }
    let reversedNames = names.sorted { (s1: String, s2: String) -> Bool
    in return s1 > s2