반응형
Notice
Recent Posts
Recent Comments
Link
공부한 것 꼭꼭 씹어먹기
closure 본문
반응형
클로저 : 코드에서 전달 및 사용할 수 있는 독립 기능 블록이며, 일급 객체의 역할을 할 수 있음
- 일급객체 : 전달 인자로 보낼 수 있고, 변수/상수 등으로 저장하거나 전달할 수 있으며, 함수의 반환값이 될 수 있다
// 클로저 표현식 : 주로 익명함수를 쓴다
{ (매개 변수) -> 리턴 타입 in
// 실행 구문
}
// 파라미터와 리턴타입이 없는 클로저 정의
let hello = { () -> () in
print("hello")
}
// 클로저 호출
hello()
// 파라미터와 리턴타입이 있는 클로저 정의
let hello2 = { (name: String) -> String in
return "Hello, \(name)"
}
// 클로저 호출
hello2(name: "Gunter") // 에러발생: 클로저에는 argument label이 없다. 위의 name은 그냥 파라미터 이름일뿐.
hello2("Gunter") // 이렇게 호출해야한다.
// 클로저를 함수의 전달인자로 전달하기
func doSomething(closure: () -> ()) {
closure()
}
doSomething(closure: {()->() in
print("hello")
})
doSomething() { // 이렇게 호출할 수도 있다.
print("hello2") // 파라미터와 리턴타입이 없는 클로저를 호출할때는 클로저 헤더와 in 키워드 생략가능.
}
doSomething { // 이렇게 호출할 수도 있다.
print("hello2") // 파라미터와 리턴타입이 없는 클로저를 하나만 호출할때는 ()도 생략가능.
}
// 클로저를 함수의 반환부로 사용하기
func doSomething2() -> () -> () {
return { () -> () in
print("hello4")
}
}
doSomething2()()
// 다중 후행 클로저 문법 🐣 아직 잘 모르겠...
func doSomething3(success: ()->(), fail: ()->()) {
}
// 클로저 표현 간소화
func doSomething4(closure: (Int, Int, Int) -> Int) {
closure(1,2,3)
}
doSomething4(closure: {(a,b,c) in
return a+b+c // 정석대로 클로저 호출
})
doSomething4(closure: {
return $0+$1+$2 // 약식인수를 통해 매개변수(a,b,c) 이름을 생략하여 사용가능
})
doSometing4(closure: {
$0+$1+$2 // 실행 구문에 단일 리턴값만 남으면 return 키워드도 생략 가능
})
doSometing4() {
$0+$1+$2 // 후행 클로저 문법
}
doSometing4 {
$0+$1+$2 // 파라미터에 단 하나의 클로저만 받는 경우 ()도 생략 가능
}
반응형
Comments