관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] escaping closure, @escaping 본문

iOS 기본 (swift)

[iOS - swift] escaping closure, @escaping

jake-kim 2021. 1. 5. 21:24

일급객체

  • 함수는 일급 객체
  • 일급 객체란 변수에 저장하거나 파라미터로 넘길 수 있는 속성

escaping이란

  • 함수가 해당 함수 내부에서만 사용되지 않고 다른 곳으로 저장하거나 참조하거나 파라미터로 넘길 수 있는 의미(==현재 함수를 탈출)
  • 함수에서의 escaping이란 함수 내부에서 사용해야할 것이 외부에서 참조되거나 파라미터로 넘겨지는 현상
  • 함수라는 것은 파라미터(인수)또한 포함되는 개념

예제) 아래 두 가지 케이스 모두 @escaping을 쓰지 않으면 컴파일 오류 발생

  • 함수의 escaping: 외부에서 저장하는 경우
    : completion이라는 인수가 escaping되어, sampleFunc라는 함수는 escaping됨
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    var completionArr: [() -> Void] = []

    func sampleFunc(completion: @escaping () -> Void) {
        completionArr.append(completion) // escaping
    }
}
  • 함수의 escaping: 외부에서 참조하는 경우
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    var completionRefer: () -> Void = { // 외부
        print("")
    }

    func sampleFunc(completion: @escaping () -> Void) {
        completionRefer = completion // escaping
    }
}
Comments