比较数组扩展中的对象导致Swift中的错误

Log*_*gan 2 swift

我正在尝试构建一个扩展,将NSArray/NSMutableArray的一些便利功能添加到Swift Array类中,我正在尝试添加此函数:

func indexOfObject(object:AnyObject) -> Int? {

    if self.count > 0 {
        for (idx, objectToCompare) in enumerate(self) {
            if object == objectToCompare {
                return idx
            }
        }
    }

    return nil
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这一行:

if object == objectToCompare {
Run Code Online (Sandbox Code Playgroud)

给出错误:

无法找到接受提供的参数的'=='的重载

我做错了什么导致这个错误?

extension Array {

    func indexOfObject(object:AnyObject) -> Int? {

        if self.count > 0 {
            for (idx, objectToCompare) in enumerate(self) {
                if object == objectToCompare {
                    return idx
                }
            }
        }

        return nil
    }

} 
Run Code Online (Sandbox Code Playgroud)

mat*_*att 7

实际上没有必要实施indexOfObject:; 已经有了全球功能find(array, element).


myt*_*thz 6

您始终可以创建使用NSArray的indexOfObject的扩展,例如:

extension Array {
    func indexOfObject(object:AnyObject) -> Int? {
        return (self as NSArray).indexOfObject(object)
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以指定可以将数组项与<T : Equatable>约束进行比较,然后可以将对象转换为T比较它们,例如:

extension Array {
    func indexOfObject<T : Equatable>(o:T) -> Int? {
        if self.count > 0 {
            for (idx, objectToCompare) in enumerate(self) {
                let to = objectToCompare as T
                if o == to {
                    return idx
                }
            }
        }

        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)