Junior — Middle
¿Cómo determina Swift la diferencia entre dos objetos en caso de colisión de hash?
sobes.tech AI
Respuesta de la IA
En Swift, el método isEqual(_:) se utiliza para comparar objetos y resolver colisiones de hash. Cuando dos objetos tienen el mismo hash (colisión), el sistema llama adicionalmente a este método para verificar si los objetos son realmente iguales.
Proceso:
- Se calcula el hash del objeto mediante
hash(into:). - Si dos objetos tienen el mismo hash, se llama a
isEqual(_:)para una comparación exacta. - Si
isEqual(_:)devuelvetrue, los objetos se consideran iguales, de lo contrario, diferentes.
Esto permite trabajar correctamente con colecciones como Set o claves en diccionarios, incluso en caso de colisiones de hash.
Ejemplo de implementación:
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
}
}
Aquí, si dos objetos Person tienen el mismo hash (por ejemplo, el mismo id), se llamará al operador == para la comparación final.