我已将代码更新至 Xcode 8.0 beta 6,但卡在了似乎与新的非转义闭包默认值有关的地方。在以下代码中,Xcode 建议在下面代码的第一行前面添加 @escaping
以解决问题,但仍无法编译并进入循环。*
(编辑: 实际上,应该在 completion:
后面添加 @escaping
,正如 Xcode 所建议的那样。警告可能仍会显示,但清理和编译将其删除。)* 如何重新编写 / 修复此代码以使其在更新的 Swift 3 中工作?我在新手册中查看了,但找不到适当的代码示例。
func doSomething(withParameter parameter: Int, completion: () -> ()) {
// Does something
callSomeOtherFunc(withCompletion: completion)
}
// Calling the method and execute closure
doSomething(withParameter: 2) {
// do things in closure
}
非常感谢任何帮助!
@escaping
以明确注释闭包参数可能会逃逸(与其默认行为相反)。这也解释了为什么@noescape
现在已经被弃用(不需要注释默认行为)。 - dfrib