web-dev-qa-db-fra.com

Remplacement de la méthode indexOf (_ :) du tableau dans Swift 3

Dans mon projet (écrit en Swift 3), je veux récupérer l'index d'un élément du tableau en utilisant la méthode indexOf(_:) (existait dans Swift 2.2), mais je ne trouve aucun remplaçant pour cela.

Y a-t-il un bon remplacement pour cette méthode dans Swift 3 ou quelque chose qui agit de la même manière?

Mise à jour

J'oublie de mentionner que je souhaite rechercher dans un objet personnalisé. Dans l'achèvement du code, je n'ai aucune indication lors de la saisie de 'indexof'. Mais quand j'essaie d'obtenir un index de build de type comme Int, l'achèvement du code fonctionne et je pouvais utiliser la méthode index(of:).

30
krlb

indexOf(_:) a été renommé index(of:) pour les types conformes à Equatable. Vous pouvez conformer n'importe lequel de vos types à Equatable, ce n'est pas seulement pour les types intégrés:

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(_:) qui prend une fermeture a été renommé 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

Cela a fonctionné pour moi dans Swift 3 sans extension:

struct MyClass: Equatable {
    let title: String

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

N'a pas fonctionné pour moi dans Swift 3 XCode 8 jusqu'à ce que je donne à ma classe un extension .

Par exemple:

class MyClass {
    var key: String?
}

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