[Swift] Escaping Closure(@escaping)

kirri1124·2021년 8월 5일
0

Swift

목록 보기
2/5
post-thumbnail

Escaping?

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초 뒤에 종료 신호가 클로저에게 보내지게 되어 클로저가 실행된다.

이러한 방법은 비동기 처리를 사용할때 유용하다.

0개의 댓글