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.

Respuestas a la pregunta(1)

Su respuesta a la pregunta