假设@nonescaping
可变参数闭包参数,如
func method(_ closures: () -> Void...)
然后将其变为@escaping
,如
func method(_ closures: @escaping () -> Void...)
产生以下错误。
@escaping属性只能在函数参数位置
中使用
答案 0 :(得分:2)
您根本不需要使用@escaping
。
作为可变参数的一部分的闭包是(在引擎盖下)包裹在Array
中,因此它已经隐含@escaping
。
例如,这个编译并运行得很好:
class MyObject {
var closures: [() -> ()] = []
func add(_ closures: () -> () ...) {
self.closures += closures
}
func run() {
for closure in closures { closure() }
}
}
let object = MyObject()
object.add({ print("first") }, { print("second") })
object.run()