Diferença entre o uso de ObjectIdentifier () e o operador '==='
Digamos que estou implementando uma classe raiz no Swift, que declaro adotar oEquatable
protocolo (quero poder saber se uma matriz do meu tipo contém uma determinada instância ou não).
Qual é a diferença , se houver, nesse caso específico, entre a implementação do protocolo exigido==
operador como:
public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {
return ObjectIdentifier(lhs) == ObjectIdentifier(rhs)
}
... em vez de apenas fazer isso:
public static func ==(lhs: MyClass, rhs: MyClass) -> Bool {
return (lhs === rhs)
}
Como referência, é isso que a documentação diz sobreObjectIdentifier()
:
Um identificador exclusivo para uma instância ou metatipo de classe. No Swift, apenas instâncias e metatipos de classe têm identidades exclusivas. Não há noção de identidade para estruturas, enumerações, funções ou tuplas.
... e é isso que a seção "Operadores básicos" deA linguagem de programação Swift (Swift 3) diz sobre o===
operador:
NOTA
O Swift também fornece dois operadores de identidade (===
e!==
), usado para testar se duas referências a objetos se referem à mesma instância de objeto. Para mais informações, consulte Classes e estruturas.