Je ne peux pas comprendre comment trouver l'index d'un objet dans un tableau. Par exemple, j'ai cette structure de données:
class Person {
var name: String
var age: Int
init(name personName: String, age personAge: Int) {
self.name = personName
self.age = personAge
}
}
let person1 = Person(name: "person1", age: 34)
let person2 = Person(name: "person2", age: 30)
...
var personsArray = [person1, person2, ...]
J'ai essayé d'utiliser personsArray.index(where: ....)
mais je ne comprends pas comment l'utiliser. index(of: ...)
ne fonctionne pas. Je pense que parce que personsArray
n'est pas conforme au protocole Equatable
...
index(of: )
obtient la personne dans votre cas - c'est une fonction générique.
index(where: )
obtient la condition pour laquelle vous voulez trouver une personne particulière
Ce que tu pourrais faire:
personsArray.index(where: { $0.name == "person1" })
Ou vous pouvez envoyer un objet à:
personsArray.index(of: existingPerson)
Pour les deux options, vous pouvez obtenir zéro - vous devrez le vérifier (ou le garder).
De mon point de vue, comparez avec ===
.
Petit exemple.
func getPersonIndex(from: [Person], user: Person) -> Int? {
return from.index(where: { $0 === user })
}
getPersonIndex(from: personsArray, user: person2)
J'ai trouvé comment utiliser .index(where...
personsArray.index { (item) -> Bool in
item.name == "person2" && item.age == 30
}