Junior — Middle
Mi a kapcsolat a Hashable és az Equatable protokollok között a Swift nyelvben?
sobes.tech MI
Válasz az MI-től
Swiftben az Equatable és Hashable protokollok szorosan összefüggnek, mivel a Hashable az Equatable-ból öröklődik.
- Equatable megköveteli az
==egyenlőség operátor implementálását, hogy két példányt össze lehessen hasonlítani egyenlőség szempontjából. - Hashable kiterjeszti az Equatable-t, és megköveteli a
hashValue(vagy ahash(into:)) tulajdonság implementálását, amely visszaadja az objektum hash-kódját.
A kapcsolat abban áll, hogy az objektum hash-kódjának kiszámításához szükség van az objektumok egyenlőség szerinti összehasonlítására, hogy helyesen működjenek a hash-alapú gyűjtemények (például Set vagy Dictionary).
Példa:
struct Person: Hashable {
var id: Int
var name: String
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
Itt a Person megfelel az Equatable és Hashable protokolloknak, lehetővé téve, hogy hash-táblákban használjuk.