【发布时间】:2019-11-16 13:18:33
【问题描述】:
我从来没有真正理解 何时 在 Swift 中使用 @escaping。我了解它的作用(即转义闭包和非转义闭包之间的区别),但是我一直依靠 Xcode 告诉我何时将修饰符添加到我的论点。
我的问题是,为什么@escaping 只适用于非零闭包?这就是我的意思:
func someFunc(someArg: Int, callback: @escaping (Error?) -> Void) {
DispatchQueue.global(qos: .background).async {
...
}
}
在上面,如果我不添加@escaping Xcode 会给我一个错误。但是,如果我将 callback 设为如下所示的可选,保留 @escaping 会导致 Xcode 错误:
// This is wrong (Xcode complains about @escaping)
func someFunc(someArg: Int, callback: @escaping ((Error?) -> Void)?) {
DispatchQueue.global(qos: .background).async {
...
}
}
这是为什么呢?谢谢!
【问题讨论】: