코드에서 전달 및 사용할 수 있는 독립 기능 블록이며, 일급 객체의 역할을 할 수 있음
전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환값이 될 수도 있다.
import UIKit
/*
{ (parameters) -> return type in
statements
}
*/
let hello = { () -> () in
print("hello")
}
hello()
let hello2 = { (name: String) -> String in
return "Hello, \(name)"
}
//hello2(name: "Daeseong") // Error : 전달인자 레이블을 적으면 오류 발생
hello2("Daeseong") // "Hello, Daeseong"
func doSomething(closure: () -> ()) {
closure()
}
doSomething(closure : { () -> () in
print("hello")
}) // "hello"
func doSomething2() -> () -> () {
return { () -> () in
print("hello!")
}
}
doSomething2()() // hello!
// Closure의 축약
func doSomething3(closure: (Int, Int, Int) -> Int) {
closure(1,2,3)
}
doSomething3(closure: {(a,b,c) in
return a+b+c
})
doSomething3(closure : {
return $0+$1+$2
})
doSomething3(closure : {
return $0+$1+$2
})
doSomething3(closure : {
$0+$1+$2
})
doSomething3(){
$0+$1+$2
}
doSomething3 {
$0+$1+$2
}