最佳答案
给出:
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?
更改类型会产生以下错误:
@ escape 属性只适用于函数类型
删除 @escaping属性后,代码将编译并运行,但似乎不正确,因为 completion闭包逃脱了函数的作用域。