Junior — Middle
Aký je vzťah medzi protokolmi Hashable a Equatable v jazyku Swift?
sobes.tech AI
Odpoveď od AI
V jazyku Swift sú protokoly Equatable a Hashable úzko prepojené, pretože Hashable dedí od Equatable.
- Equatable vyžaduje implementáciu operátora rovnosti
==, ktorý porovnáva dve inštancie na rovnosť. - Hashable rozširuje Equatable a vyžaduje implementáciu vlastnosti
hashValue(alebo metódyhash(into:)), ktorá vracia hash kód objektu.
Väzba spočíva v tom, že na výpočet hash kódu objektu je potrebné vedieť porovnávať objekty na rovnosť, aby kolekcie založené na hashoch (napríklad Set alebo Dictionary) správne fungovali.
Príklad:
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)
}
}
Tu, Person zodpovedá protokolom Equatable a Hashable, čo mu umožňuje byť použitý v hash tabuľkách.