코드에서 독립적으로 전달 및 사용할 수 있는 기능을 가진 코드 블록
변수나 상수에 저장 가능하며, 함수의 파라미터로 전달 가능
클로저 기본 문법
{ (매개변수) -> 반환타입 in
실행 코드
}
let greeting = { (name: String) -> String in
return "Hello, \\(name)!"
}
print(greeting("Mori")) // Hello, Mori!
// 1. 전체 문법
let add = { (a: Int, b: Int) -> Int in return a + b }
// 2. 타입 추론
let add = { a, b in return a + b }
// 3. return 생략
let add = { a, b in a + b }
// 4. 축약 인자 이름 ($0, $1, ...)
let add = { $0 + $1 }
var number = 10
let closure = { number += 5 } // 외부 변수 number 캡처
closure() // 앞에서 정의한 클로저 실행
print(number) // 15
number
이 let
이었다면 에러가 발생했을 것이다.let number = 10
let closure = { number += 5 } // 오류. 변경 불가능한 값