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.