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 metodehash(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.