转义关闭

来自 Swift Documentarion

@escaping

将此属性应用于方法或函数声明中的参数类型,以指示可以存储参数的值以供稍后执行。这意味着允许该值超过调用的生命周期。具有转义类型属性的函数类型参数需要显式使用 self。对于属性或方法。

class ClassThree {

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

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

在上面的例子中,完成块被保存到闭包中,并且实际上将超出函数调用。因此编译器会强制将完成块标记为 @escaping。