ObjectIdentifier necessário para a igualdade Swift?

Temos várias instâncias de uma classe Swift personalizada, herdada do SKSpriteNode, e conseguimos executar o seguinte código (simplificado para esta pergunta) corretamente:

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)

Em outras palavras, executarcheck(testInstance: instance3) devolvidafalse como esperado.

No entanto, fizemos várias alterações echeck parou de trabalhar.

CustomClass não implementa oEquatable protocolo. Nós apenas queremos detectar instâncias únicas.

Ele só começou a funcionar quando usamosObjectIdentifier, significando que a função foi alterada para isso:

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

Porque éObjectIdentifier necessário e quando deve ser usado para a igualdade de objetos?

Isso foi escrito com o Swift 3.

questionAnswers(1)

yourAnswerToTheQuestion