¿Se necesita ObjectIdentifier para la igualdad de Swift?

Tenemos varias instancias de una clase Swift personalizada, que hereda de SKSpriteNode, y pudimos ejecutar el siguiente código (simplificado enormemente para esta pregunta) correctamente:

let instance1 = CustomClass()
let instance2 = CustomClass()
let instance3 = CustomClass()
let instance4 = CustomClass()

let array1 = [instance1, instance2]
let array2 = [instance3, instance4]

func check(testInstance: CustomClass) -> Bool {
   return array1.filter({ $0 == testInstance }).count > 0
}

check(testInstance: instance3)

En otras palabras, ejecutandocheck(testInstance: instance3) regresadofalse como se esperaba.

Sin embargo, hicimos un montón de cambios, ycheck dejó de funcionar.

CustomClass no implementa elEquatable protocolo. Solo queremos detectar instancias únicas.

Solo comenzó a funcionar cuando usamosObjectIdentifier, lo que significa que la función cambió a esto:

func check(testInstance: CustomClass) -> Bool {
   return array1.filter({ ObjectIdentifier($0) == ObjectIdentifier(testInstance) }).count > 0
}

Por que esObjectIdentifier necesario, y cuándo se debe utilizar para la igualdad de objetos?

Esto fue escrito con Swift 3.

Respuestas a la pregunta(1)

Su respuesta a la pregunta