Sobes.tech
Junior — Middle

Koja je veza između protokola Hashable i Equatable u jeziku Swift?

sobes.tech АИ

Одговор од АИ

U Swift-u, protokoli Equatable i Hashable su usko povezani, jer Hashable nasleđuje od Equatable.

  • Equatable zahteva implementaciju operatora jednakosti ==, za poređenje dve instance na jednakost.
  • Hashable proširuje Equatable i zahteva implementaciju svojstva hashValue (ili metode hash(into:)), koje vraća hash kod objekta.

Veza je u tome što je za izračunavanje hash koda objekta potrebno da možemo porediti objekte na jednakost, kako bi kolekcije zasnovane na hash-u (kao što su Set ili Dictionary) ispravno funkcionisale.

Primer:

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

Ovde, Person odgovara protokolima Equatable i Hashable, što mu omogućava korišćenje u hash tabelama.