Escaping 클로저는 클로저가 함수의 인자로 전달됐을 때, 함수의 실행이 종료된 후 작동되는 클로저이다.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
print("ViewController - ViewDidLoad() Called")
sayHi(completion: {
print("sayHi 끝났음")
})
}
fileprivate func sayHi(completion: @escaping() -> ()) {
// @escaping은 탈출한다라는 의미
print("ViewController - sayHi() Called")
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
//print("ㅎㅇ")
// completion 블럭을 통해
// "이 메서드가 실행이 끝났다" 라는 것을 알려줄 수 있다.
// 이를 통해서 비동기 처리를 할 수가 있다.
completion()
}
}
}
끝날 때 끝났다라는 신호를 받고 싶다면 원하는 메서드의 매개변수를 @escaping
으로 설정해주고 메서드 안에서 escaping을 실행해주면 된다.
그리고 난 뒤에 사용하려는 곳에서 클로저를 작성해주면 된다.
위 코드에서는 sayHI()
메서드를 실행하고 2초뒤에 처리를 끝냈다라는 신호를 보내고 난 뒤에 "끝났다"라는 출력문을 내보내는 코드를 작성하였다.
따라서 이 코드를 실행하고 나면
이렇게 2초 뒤에 종료 신호가 클로저에게 보내지게 되어 클로저가 실행된다.
이러한 방법은 비동기 처리를 사용할때 유용하다.