En Swift, el operador == se utiliza para verificar la igualdad de dos valores. Para que este operador se pueda usar con tipos personalizados, el tipo debe conformar el protocolo Equatable y implementar la función estática ==.
La implementación debe ser simétrica y transitiva. Ejemplo:
struct Person: Equatable { let name: String let age: Int static func ==(lhs: Person, rhs: Person) -> Bool { return lhs.name == rhs.name && lhs.age == rhs.age } }
Es importante recordar que si tu tipo no implementa ==, entonces intentar comparar dos instancias de ese tipo resultará en un error de compilación.
Pregunta: Si una estructura o clase conforma al protocolo Equatable, ¿por qué a veces no es necesario implementar explícitamente el operador ==?
Respuesta: Para las estructuras, si todas las propiedades también conforman Equatable, Swift sintetiza automáticamente la implementación del operador ==. Pero si el tipo tiene propiedades que no son Equatable, o el tipo es una clase con herencia personalizada, no habrá síntesis, y será necesario implementar el operador manualmente.
struct Point: Equatable { var x: Int var y: Int // La implementación de == no es necesaria, se sintetiza automáticamente }
Historia
En un proyecto, un desarrollador agregó una propiedad del tipo
UIImagea una estructura que ya conformabaEquatable. Se produjo un error de compilación porqueUIImageno conformaEquatable, por lo que no se pudo sintetizar automáticamente==para la estructura. La solución fue implementar el operador==manualmente, comparando solo las propiedades relevantes para la lógica.
Historia
Se produjo un error después de agregar una nueva propiedad a la estructura, pero se olvidó de agregar su comparación en el operador
==personalizado. Esto llevó a una lógica incorrecta al trabajar con colecciones y errores en el filtro personalizado del usuario.
Historia
En el proyecto se escribió una clase personalizada sin la implementación de
Equatable, pero se intentó usarla en un Set. Esto resultó en un error en tiempo de ejecución, ya que Set requiere que los elementos sean únicos (y, por lo tanto,Equatable).