ios – 在Swift 3转换之后,我无法摆脱错误:“不明确地使用’indexOfObject(passingTest :)’”

前端之家收集整理的这篇文章主要介绍了ios – 在Swift 3转换之后,我无法摆脱错误:“不明确地使用’indexOfObject(passingTest :)’”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用NSArray的indicesOfObjects(passingTest :),但在我将代码转换为 Swift 3之后,我得到错误:“不明确地使用’indexOfObject(passingTest :)’”.
我的代码在Swift 2.3下运行良好.
let indexesOfBubbleConstraints = bubbleConstraints.indexesOfObjects(passingTest: { (constraint,idx,stop) in
        if let view = constraint.firstItem as? UIView{
            return view.tag == usernaMetag
        }
        else{
            return false
        }
    })

对于Swift 3,我还必须将约束强制转换为AnyObject,但这并不能解决实际问题.

我最终使用func indicesOfObjects(options:NSEnumerationOptions = [],passingTest:(Any,Int,UnsafeMutablePointer< ObjCBool​​>) – > Bool),其中包含一个空数组,如下所示.这有效,但我仍然不明白为什么我的原始实现会出现“不明确…”错误.

let indexesOfBubbleConstraints = bubbleConstraints.indexesOfObjects(options: [],passingTest: { (constraint,stop) in
        if let view = (constraint as AnyObject).firstItem as? UIView{
            return view.tag == usernaMetag
        }
        else{
            return false
        }
    })

解决方法

在Objective-C中,两个索引的方法有两种不同的方法
- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (NS_NOESCAPE ^)(ObjectType obj,NSUInteger idx,BOOL *stop))predicate NS_AVAILABLE(10_6,4_0);
- (NSIndexSet *)indexesOfObjectsWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL (NS_NOESCAPE ^)(ObjectType obj,4_0);

而现在,Swift 3将这些导入为模糊的两种方法

@available(iOS 4.0,*)
open func indexesOfObjects(passingTest predicate: (Any,UnsafeMutablePointer<ObjCBool>) -> Bool) -> IndexSet

@available(iOS 4.0,*)
open func indexesOfObjects(options opts: NSEnumerationOptions = [],passingTest predicate: (Any,UnsafeMutablePointer<ObjCBool>) -> Bool) -> IndexSet

一个是indicesOfObjects(passingTest :),另一个是indicesOfObjects(options:passingTest :).不幸的是,Swift 3给出了参数选项的默认值,这使得像bubbleConstraints.indexesOfObjects(passingTest:…)这样的简单调用变得模棱两可.

它可能在呼唤

> indicesOfObjects(passingTest

猜你在找的iOS相关文章