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.