ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • swift - Escaping Closure
    swift 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

    댓글

Designed by Tistory.