替换Swift 3中数组的indexOf(_ :)方法

时间:2016-07-13 12:02:13

标签: ios swift3

在我的项目中(用Swift 3编写)我想使用indexOf(_:)方法(存在于Swift 2.2中)从数组中检索元素的索引,但我找不到任何替代。

Swift 3中的方法或类似的任何方法有没有什么好的替代品?

更新

我忘了提到我想在自定义对象中搜索。在代码完成中,输入'indexof'时没有任何提示。但是,当我尝试在类似Int代码完成的类型中获取构建索引时,我可以使用index(of:)方法。

3 个答案:

答案 0 :(得分:49)

对于符合indexOf(_:)的类型,

index(of:)已重命名为Equatable。您可以将任何类型都符合Equatable,这不仅适用于内置类型:

struct Point: Equatable {
    var x, y: Int
}

func == (left: Point, right: Point) -> Bool {
    return left.x == right.x && left.y == right.y
}

let points = [Point(x: 3, y: 5), Point(x: 7, y: 2), Point(x: 10, y: -4)]
points.index(of: Point(x: 7, y: 2)) // 1
带有闭包的

indexOf(_:)已重命名为index(where:)

[1, 3, 5, 4, 2].index(where: { $0 > 3 }) // 2

// or with a training closure:
[1, 3, 5, 4, 2].index { $0 > 3 } // 2

答案 1 :(得分:1)

在我给我的班级extension之前,在Swift 3 XCode 8中没有为我工作。

例如:

class MyClass {
    var key: String?
}

extension MyClass: Equatable {
    static func == (lhs: MyClass, rhs: MyClass) -> Bool {
        return MyClass.key == MyClass.key
    }
}

答案 2 :(得分:1)

这对我来说在Swift 3中没有扩展名:

struct MyClass: Equatable {
    let title: String

    public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {
        return lhs.title == rhs.title
    }
}