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)
Um index(of:)
zu verwenden, muss ich Person zu Equatable-Protokoll anpassen. Soweit ich weiß, ermöglicht das Equatable-Protokoll den Vergleich zweier Instanzen für die Gleichheit. Was ist die Beziehung zwischen dem Finden eines Indexes und dem Vergleich für Gleichheit? Warum muss ich Equatable-Protokoll entsprechen, um index(of:)
zu verwenden?Index (von :) und Equatable Protokoll
das Protokoll zu verabschieden gleichzusetzen, muss ich den (==)
Operator als statische Methode implementieren:
static func ==(lhs: Person, rhs: Person) -> Bool {
return (lhs.name == rhs.name) && (lhs.age == rhs.age)
}
ich keine Person Instanzen für die Gleichstellung hier bin im Vergleich, warum muss ich immer noch zu return (lhs.name == rhs.name) && (lhs.age == rhs.age)
? Wofür ist das? Hat es etwas mit index(of:)
zu tun?
Entschuldigung für diese blöde Frage.
Beantwortet [die Implementierung von 'index (of:)'] (https://github.com/apple/swift/blob/master/stdlib/public/core/CollectionAlgorithms.swift.gyb#L64) Ihre Frage ? :) – Hamish
Obwohl ich nicht sicher bin, verstehe ich den zweiten Teil Ihrer Frage, "* Ich vergleiche keine Person Instanzen für Gleichheit hier *" - ja, Sie sind, vergleichen Sie 'lhs' Eigenschaften mit' rhs 's Eigenschaften. – Hamish
Es hilft. Vielen Dank :) – Frankie