typealias Action =() ->()
var action: Action = { }
func doStuff(stuff: String, completion: @escaping Action) {
print(stuff)
action = completion
completion()
}
func doStuffAgain() {
print("again")
action()
}
doStuff(stuff: "do stuff") {
print("swift 3!")
}
doStuffAgain()
有没有什么办法让Action?
型completion
参数(和action
),并保持@escaping
?
更改类型提供了以下错误:
error: @escaping attribute only applies to function types
卸下@escaping
属性,代码编译和运行,但似乎并没有被正确的,因为completion
关闭是逃逸的范围功能。
“卸下'@ escaping'属性,代码编译并运行“ - 这是因为,正如[SR-2444](https://bugs.swift.org/browse/SR-2444)中所述,”Action?“默认情况下是转义的。所以,使用可选闭包时删除'@ escaping'就能完成你所需要的。 – Rob
相关:[更新闭包到Swift 3 - @escaping](http://stackoverflow.com/questions/39063499/updating-closures-to-swift-3-escaping/)。 – dfri
类型别名关闭正在转义 – Masih