Junior — Middle
¿Cuál es la relación entre los protocolos Hashable y Equatable en el lenguaje Swift?
sobes.tech AI
Respuesta de la IA
En Swift, los protocolos Equatable y Hashable están estrechamente relacionados, ya que Hashable hereda de Equatable.
- Equatable requiere la implementación del operador de igualdad
==para comparar dos instancias por igualdad. - Hashable extiende a Equatable y requiere la implementación de la propiedad
hashValue(o del métodohash(into:)), que devuelve el código hash del objeto.
La relación radica en que, para calcular el código hash de un objeto, es necesario poder compararlo por igualdad, para trabajar correctamente con colecciones basadas en hashes (como Set o Dictionary).
Ejemplo:
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)
}
}
Aquí, Person cumple con Equatable y Hashable, lo que permite usarlo en tablas hash.