鉴于:
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
?
更改类型会导致以下错误:
@转义属性仅适用于函数类型
删除@escaping
属性后,代码将编译并运行,但似乎不正确,因为completion
闭包正在脱离函数的作用域.