-
swift - Escaping Closureswift 2021. 1. 5. 18:21
Escaping Closure
non-escaping closure - 함수 실행이 종료 되기전에 closure가 종료된다.
escaping closure - 함수 실행이 종료된 이후에도 실행될 수 있다.
// 탈출하는 클로저? // 무엇으로부터 탈출하는지 이해하는게 핵심이다. // 클로저를 파라미터로 받는다. func performNonEscaping(closure: () -> ()) { print("start") closure() print("end") } // 이런 함수 바디에서 호출하고 있는 클로저는 항상 함수실행이 종료되기전에 실행이 완료된다 // 이런게 nonEscaping Closure이다. (함수의 실행을 탈출하지 않는다.) performNonEscaping { print("closure") } // escaing closure는 함수의 실행이 종료된 이후에도 실행될 수 있다. func performEscaping(closure: @escaping () -> ()) { print("start") var a = 12 DispatchQueue.main.asyncAfter(deadline: .now() + 3) { closure() // 클로저가 a를 캡처 -> 클로저가 실행완료될때까지 a가 삭제되면 안된다. print(a) } print("end") } performEscaping { print("clousure") } // 이런 escaping closure가 왜 필요할까? // 파라미터의 생명주기를 살펴보자 // 파라미터는 함수의 실행이 시작되면 생성되었다가 함수의 실행이 종료되면 자동으로 삭제된다.
'swift' 카테고리의 다른 글
swift - Raw String (0) 2021.01.06 swift - Tuples (0) 2021.01.05 swift - Capturing Values (0) 2021.01.05 swift - Closure Syntax Optimization (0) 2021.01.05 swift - Closure (0) 2021.01.05