鉴于:
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()
有什么方法可以使completion
参数(和action
)的类型Action?
也保持不变@escaping
?
更改类型会出现以下错误:
@escaping属性仅适用于函数类型
删除该@escaping
属性后,代码将编译并运行,但是由于completion
闭包使函数的作用范围变大,因此似乎并不正确。
@escaping
属性,代码将编译并运行”-这是因为,如SR-2444中所述,Action?
默认情况下是转义。因此,@escaping
在使用可选闭包时删除即可满足您的需求。