我有一个扩展数组的形式:
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: $0) } } } let x = [1,2,3] x.someOtherFunction(someOtherClosure: { return 1 })
希望这有用!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。