Escaping Closure

Groot·2022년 12월 18일
0

TIL

목록 보기
116/148
post-thumbnail

TIL

🌱 난 오늘 무엇을 공부했을까?

📌 Escaping Closure

  • 함수의 매개변수로 받은 클로저를 함수 밖에서도 호출이 가능하도록 사용하는 방법
  • 주로 비동기 호출에서 사용한다.
  • 기본적으로 함수의 매개변수로 들어오는 클로저는 함수 안에서만 사용할 수 있다.
  • 비동기로 클로저를 실행할 때 큐는 클로저를 메모리에 보관하고 나중에 사용
import Foundation

var escapingClosure: (String) -> Void = {_ in }

func excute(text: String, escapingClosuer: @escaping (String) -> Void, nonEscapingClosure: (String) -> Void) {
    DispatchQueue.global().async {
        escapingClosure(text)
//        nonEscapingClosure(text)
// 주석을 제거하면 "Escaping closure captures non-escaping parameter 'nonEscapingClosuer'" 라는 에러가 나타난다.
    }
}

excute(text: "출력") { String in
    print(String)
} nonEscapingClosuer: { String in
    print(String)
}
sleep(10)
  • Escaping Closure를 사용하는 이유
    • 함수내부에서 비동기처리를 하면 호출되는 시점이 언제인지 모르기 때문에(함수의 호출이 끝나고 클로저가 호출이 될 수 있기 때문에) 탈출 클로저를 사용해서 함수의 호출이 끝나도 클로저의 호출이 가능하도록 하기 위해서 사용하는거 같다.
profile
I Am Groot

0개의 댓글