클로저에 @escaping 키워드를 사용
: 클로저로 넘기는 함수의 인자가 기존의 함수의 영역을 넘어서도 사용할 수 있도록 함
// 함수 외부에 클로저를 저장하는 예시
// 클로저를 저장하는 배열
var completionHandlers: [() -> Void] = []
func withEscaping(completion: @escaping () -> Void) {
// 함수 밖에 있는 completionHandlers 배열에 해당 클로저를 저장
completionHandlers.append(completion)
}
func withoutEscaping(completion: () -> Void) {
completion()
}
class MyClass {
var x = 10
func callFunc() {
withEscaping { self.x = 100 }
withoutEscaping { x = 200 }
}
}
let mc = MyClass()
mc.callFunc()
print(mc.x)
completionHandlers.first?()
print(mc.x)
// 결과
// 200
// 100
@escaping 키워드를 붙인 클로저의 경우는 해당 함수 영역을 벗어나서도 함수 인자를 사용할 수 있음
참고 링크 : https://hcn1519.github.io/articles/2017-09/swift_escaping_closure