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.

questionAnswers(1)

yourAnswerToTheQuestion