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