Sobes.tech
Junior — Middle

Kokias savybes turi turėti objektas, kuris įgyvendina Hashable protokolą, kad jį būtų galima naudoti žymeklių lentelėse?

sobes.tech AI

Atsakymas iš AI

„iOS“ (Swift) įgyvendinančio objekto, kuris atitinka protokolą Hashable, turi turėti šias savybes:

  1. Atitiktis protokolui Hashable — objektas turi įgyvendinti metodą hash(into:), kuris prideda visas svarbias savybes į hash funkciją.

  2. Lygybė (Equatable) — objektai, laikomi lygiais (naudojant operatorių ==), turi turėti tą patį hash.

Tai būtina, kad objektas galėtų būti naudojamas hash lentelėse (pavyzdžiui, Set arba kaip raktas Dictionary), kur hash nurodo elemento poziciją, o lygybė — unikalumą.

Įgyvendinimo pavyzdys:

struct User: Hashable {
    var id: Int
    var name: String

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }

    static func == (lhs: User, rhs: User) -> Bool {
        return lhs.id == rhs.id
    }
}

Čia id yra unikalus identifikatorius, pagal kurį nustatomas hash ir lygybė.