Diferencia entre usar ObjectIdentifier () y el operador '==='
Digamos que estoy implementando una clase raíz en Swift, que declaro adopta elEquatable
protocolo (quiero poder saber si una matriz de mi tipo contiene una instancia determinada o no).
Cuál es la diferencia -si existe, en este caso específico- entre la implementación del protocolo requerido==
operador como:
public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {
return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
}
... en lugar de solo hacer esto:
public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {
return (lhs === rhs)
}
Como referencia, esto es lo que dice la documentación sobreObjectIdentifier()
:
Un identificador único para una instancia de clase o metatipo. En Swift, solo las instancias de clase y los metatipos tienen identidades únicas. No existe una noción de identidad para estructuras, enumeraciones, funciones o tuplas.
... y esto es lo que la sección "Operadores básicos" deEl lenguaje de programación Swift (Swift 3) dice sobre el===
operador:
NOTA
Swift también proporciona dos operadores de identidad (===
y!==
), que utiliza para probar si dos referencias de objeto se refieren a la misma instancia de objeto. Para obtener más información, consulte Clases y estructuras.