最佳答案
给出:
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
闭包逃脱了函数的作用域。