Sobes.tech
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 metody hash(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.