Junior — Middle
Wat is de relatie tussen de protocollen Hashable en Equatable in de Swift-taal?
sobes.tech AI
Antwoord van AI
In Swift zijn de protocollen Equatable en Hashable nauw met elkaar verbonden, omdat Hashable afgeleid is van Equatable.
- Equatable vereist de implementatie van de gelijkheid-operator
==om twee instanties op gelijkheid te vergelijken. - Hashable breidt Equatable uit en vereist de implementatie van de eigenschap
hashValue(of de methodehash(into:)), die de hash-code van het object retourneert.
De relatie is dat, om de hash-code van een object te berekenen, het mogelijk moet zijn om objecten op gelijkheid te vergelijken, zodat correct gewerkt kan worden met hash-gebaseerde collecties (zoals Set of Dictionary).
Voorbeeld:
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)
}
}
Hier voldoet Person aan zowel Equatable als Hashable, waardoor het in hash-tabellen gebruikt kan worden.