Sobes.tech
Junior — Middle

Kokia yra ryšys tarp protokolų Hashable ir Equatable Swift kalboje?

sobes.tech AI

Atsakymas iš AI

Swift kalboje protokolai Equatable ir Hashable yra glaudžiai susiję, nes Hashable paveldi iš Equatable.

  • Equatable reikalauja įgyvendinti lygybės operatorių ==, kad palygintų dvi instancijas dėl lygybės.
  • Hashable išplečia Equatable ir reikalauja įgyvendinti savybę hashValue (arba metodą hash(into:)), kuris grąžina objekto hash kodą.

Ryšys tas, kad norint apskaičiuoti objekto hash kodą, būtina galėti palyginti objektus dėl lygybės, kad teisingai veiktų hash pagrįstos kolekcijos (pvz., Set ar Dictionary).

Pavyzdys:

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)
    }
}

Čia, Person atitinka Equatable ir Hashable, leidžiantį jį naudoti hash lentelėse.