본문 바로가기

프로그래밍

@escaping

클로저에 @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

 

Swift Escaping Closure 이해하기

Swift의 Escaping Closure에 대해 알아봅니다.

hcn1519.github.io