class Person: Equatable {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
static func ==(lhs: Person, rhs: Person) -> Bool {
return (lhs.name == rhs.name) && (lhs.age == rhs.age)
}
}
let p1 = Person(name: "David", age: 29)
let p2 = Person (name: "John", age: 28)
var people = [Person]()
people.append(p1)
people.append(p2)
let p1index = people.index(of: p1)
let p2index = people.index(of: p2)
Pour utiliser index(of:)
, je dois me conformer au protocole Equatable. D'après ce que je sais, le protocole Equatable permet de comparer 2 instances pour l'égalité. Quelle est la relation entre trouver un index et comparer pour l'égalité? Pourquoi je dois me conformer au protocole Equatable afin d'utiliser index(of:)
?Index (de :) et protocole équivalent
Pour adopter le protocole assimilables, je dois mettre en œuvre l'opérateur (==)
comme méthode statique:
static func ==(lhs: Person, rhs: Person) -> Bool {
return (lhs.name == rhs.name) && (lhs.age == rhs.age)
}
Je ne compare pas les instances de personne pour l'égalité ici, pourquoi dois-je encore return (lhs.name == rhs.name) && (lhs.age == rhs.age)
? Pourquoi est-ce? Est-ce que cela a quelque chose à voir avec index(of:)
?
Désolé de poser cette question stupide.
Est-ce que [l'implémentation de 'index (de:)'] (https://github.com/apple/swift/blob/master/stdlib/public/core/CollectionAlgorithms.swift.gyb#L64) répond à votre question ? :) – Hamish
Bien que je ne sois pas sûr de comprendre la deuxième partie de votre question, "* Je ne compare aucune instance de personne pour l'égalité ici" - oui vous l'êtes, vous comparez les propriétés de 'lhs' avec' rhs les propriétés de '. – Hamish
Ça aide. Merci beaucoup :) – Frankie