web-dev-qa-db-ja.com

Swift 3の配列のindexOf(_ :)メソッドの置換

私のプロジェクト(Swift 3)で記述)indexOf(_:)メソッドを使用して配列から要素のインデックスを取得したい(Swift 2.2)、しかし、私はそれに代わるものを見つけることができません。

Swift 3または同様に機能するものに、そのメソッドの代替品がありますか?

更新

カスタムオブジェクトで検索したいということを忘れてしまいました。コード補完では、「indexof」と入力してもヒントが得られません。しかし、Intなどのタイプのビルドのインデックスを取得しようとすると、コード補完が機能し、index(of:)メソッドを使用できます。

30
krlb

indexOf(_:)は、Equatableに準拠する型のindex(of:)に名前が変更されました。任意の型を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
_
49
Tim Vermeulen

これはSwift 3で拡張なしで機能しました:

struct MyClass: Equatable {
    let title: String

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

Swift 3 XCode 8でクラスに extension を指定するまでは機能しませんでした。

例:

class MyClass {
    var key: String?
}

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