Junior — Middle
Jaki jest związek między protokołami Hashable i Equatable w języku Swift?
sobes.tech AI
Odpowiedź od AI
W Swift protokoły Equatable i Hashable są ze sobą ściśle powiązane, ponieważ Hashable dziedziczy po Equatable.
- Equatable wymaga implementacji operatora równości
==, aby porównywać dwa egzemplarze pod kątem równości. - Hashable rozszerza Equatable i wymaga implementacji właściwości
hashValue(lub metodyhash(into:)), która zwraca kod hash obiektu.
Związek polega na tym, że do obliczenia kodu hash obiektu konieczne jest porównanie obiektów pod kątem równości, aby poprawnie korzystać z kolekcji opartych na hashach (np. Set lub Dictionary).
Przykład:
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)
}
}
Tutaj, Person jest zgodny z Equatable i Hashable, co pozwala na użycie go w tabelach hash.