내부 함수와 내부 함수에 영향을 미치는 주변 환경(Context)을 모두 포함한 객체
{(매개변수) -> 반환타입 in 실행코드}
func sumFunction(a: Int, b: Int) -> Int {
return a + b
}
var sumResult: Int = sumFunction(a: 1, b: 2)
var sum: (Int, Int) -> Int = {(a: Int, b: Int) in
return a + b
}
sumResult = sum(1, 2)
1급 객체(First-Class Object)란 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 가리킨다
let closure = { () -> () in
print("Closure")
}
let closure2 = closure
클로저 또한 변수나 상수에 대입할 수 있고, 이 대입된 변수나 상수로 실행도 할 수도 있다.
func doSomething(closure: () -> ()) {
closure()
}
doSomething이라는 함수가 존재할 때,
doSomething(closure: { () -> () in
print("Hello!")
})
파라미터로 클로저를 넘겨주고 있는 모습이다.
func doSomething() -> () -> () {
return { () -> () in
print("Hello Sodeul!")
}
}
let closure = doSomething()
closure()
또한 호출하는 곳에서 클로저를 받아서 사용할 수 있다.