轉義關閉

來自 Swift Documentarion

@escaping

將此屬性應用於方法或函式宣告中的引數型別,以指示可以儲存引數的值以供稍後執行。這意味著允許該值超過呼叫的生命週期。具有轉義型別屬性的函式型別引數需要顯式使用 self。對於屬性或方法。

class ClassThree {

    var closure: (() -> ())?

    func doSomething(completion: @escaping () -> ()) {
        closure = finishBlock
    }
}

在上面的例子中,完成塊被儲存到閉包中,並且實際上將超出函式呼叫。因此編譯器會強制將完成塊標記為 @escaping。