이 글은 swift를 공부하는 누가 봐도 이해할 수 있도록 설명하는 것이 목적인 글이다.
또한 언제 다시봐도 이해가 가능한 글을 쓰는 것 또한 주된 목적이다.
클로저는 특정 컨텍스트에서 값을 캡처할 수 있는 독립적인 실행 단위이며 1급 객체이다.
{(파라미터)->Return Type in 실행구문}
//Head //Body
let closure = { () -> () in print("Closure") }
클로저는 파라미터와 Return Type이 존재하고 둘다 생략할수 있다.
또한 클로저에선 리턴값이 존재하더라도 생략이 가능하다
함수는 이름이 있는 클로저라고 할 수 있다.
- 모든 함수는 클로저지만 모든 클로저는 함수가 아니다!
let closure = { () -> String in
return "Hello Sodeul!"
}
//호출
closure()
({ () -> () in
print("Hello Sodeul!")
})()
//클로저 선언
let closure = { (name: String) -> String in
return "Hello, \(*name)"
}
//클로저 호출
closure("Sodum")
closure(name: "Sodum") //error
*은 함수에서처럼 argument name과 parameter name이 결합된 것이 아니고 단일 parameter name이다
//클로저를 선언과 동시에 상수에 대입
let closure = { () -> () in
print("Closure")
}
//만들어진 클로저를 상수에 대입
let closure2 = closure
// 함수에 매개변수 대입
doSomething(closure: { () -> () in
print("Hello!")
})
// 함수의 리턴값으로 클로저 사용
func doSomething() -> () -> () {
return { () -> () in
print("Hello Sodeul!")
}
}
//실행
let closure = doSomething()
closure()