2021년 11월 17일에 공부한 내용입니다.
후행 클로저(trailing closure)
로 함수 밖에 구현할 수 있다.return
키워드를 생략하더라도 반환 값으로 취급한다.func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {
return method(a, b)
}
var result: Int
클로저가 함수의 마지막 전달인자일 때, 마지막 매개변수의 이름을 생략한후 함수 소괄호 외부에 클로저를 구현할 수 있다.
result = calculate(a: 10, b: 10) { (left: Int, right: Int) -> Int in
return left + right
}
print(result) // 20
calculate(a:b:method: )
함수의 method
매개변수는 Int
타입을 반환할 것이라는 사실을 컴파일러도 알기 때문에 굳이 클로저에서 반환타입을 명시해주지 않아도 된다. 대신 in
키워드는 생략할 수 없다.result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) in
return left + right
})
print(result) // 20
// 후행 클로저와 함께 사용할 수도 있다.
result = calculate(a: 10, b: 10) { (left: Int, right: Int) in
return left + right
}
$0, $1, $2...
처럼 표현한다.result = calculate(a: 10, b: 10, method: { // in도 생략
return $0 + $1
})
print(result) // 20
// 당연히 후행 클로저와 함께 사용할 수 있다.
result = calculate(a: 10, b: 10) {
return $0 + $1
}
print(result) // 20
result = calculate(a: 10, b: 10) {
$0 + $1
}
print(result) // 20
// 간결하게 한 줄로 표현할 수도 있다.
result = calculate(a: 10, b: 10) { $0 + $1 }
print(result) // 20
result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) -> Int in
return left + right
})
result = calculate(a: 10, b: 10) { $0 + $1 }
print(result) // 20