Junior — Middle
Come determina Swift la differenza tra due oggetti in caso di collisione dell'hash?
sobes.tech AI
Risposta dell'AI
In Swift, il metodo isEqual(_:) viene utilizzato per confrontare oggetti e risolvere collisioni di hash. Quando due oggetti hanno lo stesso hash (collisione), il sistema chiama anche questo metodo per verificare se gli oggetti sono effettivamente uguali.
Processo:
- Viene calcolato l'hash dell'oggetto tramite
hash(into:). - Se due oggetti hanno lo stesso hash, viene chiamato
isEqual(_:)per un confronto preciso. - Se
isEqual(_:)restituiscetrue, gli oggetti sono considerati uguali, altrimenti diversi.
Questo permette di lavorare correttamente con collezioni come Set o chiavi nei dizionari, anche in caso di collisioni di hash.
Esempio di implementazione:
class Person: Hashable {
let id: Int
let name: String
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id && lhs.name == rhs.name
}
}
Qui, se due oggetti Person hanno lo stesso hash (ad esempio, lo stesso id), verrà chiamato l'operatore == per il confronto finale.