¿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.