주어진:
typealias Action = () -> ()
var action: Action = { }
func doStuff(stuff: String, completion: @escaping Action) {
print(stuff)
action = completion
completion()
}
func doStuffAgain() {
print("again")
action()
}
doStuff(stuff: "do stuff") {
print("swift 3!")
}
doStuffAgain()
유형 의 completion
매개 변수 (및 action
) 를 만들고 Action?
유지하는 방법이 @escaping
있습니까?
유형을 변경하면 다음 오류가 발생합니다.
@escaping 속성은 함수 유형에만 적용됩니다
@escaping
속성을 제거하면 코드가 컴파일되고 실행되지만 completion
클로저가 함수의 범위를 벗어나 므로 올바른 것으로 보이지 않습니다 .
@escaping
속성을, 코드 컴파일 및 실행"-에 설명 된대로 때문의 SR-2444 ,Action?
탈출, 기본적으로있다. 따라서@escaping
옵션 폐쇄를 사용할 때 제거 하면 필요한 것을 달성 할 수 있습니다.