30 votes

Remplacement de la méthode indexOf(_:) des tableaux en Swift 3

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

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

Mise à jour

J'ai oublié de mentionner que je veux rechercher dans un object personnalisé. Lors de l'autocomplétion, je n'ai pas eu d'indications en tapant 'indexof'. Mais lorsque j'essaie d'obtenir l'index du type intégré comme Int, l'autocomplétion fonctionne et je pourrais utiliser la méthode index(of:).

1 votes

indexOf() ? Syntaxe différente, même fonctionnalité. Suggestion : Utiliser la complétion de code.

0 votes

Vous devez lire et mettre en favori ce document : github.com/apple/swift-evolution/blob/master/proposals/…

0 votes

Oui, j'ai essayé. Mais la complétion de code n'a pas montré la méthode index(of:) pour l'objet personnalisé. Elle ne montre que pour les types intégrés.

49voto

timvermeulen Points 1000

indexOf(_:) a été renommé en index(of:) pour les types qui se conforment à Equatable. Vous pouvez faire en sorte que n'importe lequel de vos types se conforme à 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é en index(where:) :

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

// ou avec une fermeture en fin :
[1, 3, 5, 4, 2].index { $0 > 3 } // 2

1 votes

Les questions équitables :).

1voto

Sean Points 681

N'a pas fonctionné pour moi en Swift 3 XCode 8 jusqu'à ce que j'ai donné à ma classe une extension.

Par exemple :

class MyClass {
    var key: String?
}

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

1voto

kans Points 36

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

struct MyClass: Equatable {
    let title: String

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X