extension Array{ private func someFunction(someClosure: (() -> Int)?) { // Do Something } func someOtherFunction(someOtherClosure: () -> Int) { someFunction(someClosure: someOtherClosure) }}
但我收到错误:将非转义参数’someOtherClosure’传递给函数,期望@escaPing闭包.
两个闭包确实是非转义(默认情况下),并且明确地将@noescape添加到someFunction会产生一个警告,指示这是Swift 3.1中的默认值.
知道我为什么会收到这个错误吗?
– 更新 –
附上截图:
Swift 3.1有一个withoutActuallyEscaping辅助函数,在这里很有用.它标记了一个闭包,只是为了在传递的闭包内使用它,因此您不必将转义属性公开给函数签名.
可以像这样使用:
extension Array { private func someFunction(someClosure: (() -> Int)?) { someClosure?() } func someOtherFunction(someOtherClosure: () -> Int) { withoutActuallyEscaPing(someOtherClosure) { someFunction(someClosure: ) } }}let x = [1,2,3]x.someOtherFunction(someOtherClosure: { return 1 })
希望这有用!
总结以上是内存溢出为你收集整理的解决Swift 3中的非转义闭包问题全部内容,希望文章能够帮你解决解决Swift 3中的非转义闭包问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)