Junior — Middle
Como o Swift diferencia entre dois objetos em caso de colisão de hash?
sobes.tech IA
Resposta da IA
Em Swift, o método isEqual(_:) é utilizado para comparar objetos e resolver colisões de hash. Quando dois objetos têm o mesmo hash (colisão), o sistema chama adicionalmente esse método para verificar se os objetos são realmente iguais.
Processo:
- O hash do objeto é calculado através de
hash(into:). - Se dois objetos têm o mesmo hash,
isEqual(_:)é chamado para uma comparação exata. - Se
isEqual(_:)retornatrue, os objetos são considerados iguais, caso contrário, diferentes.
Isso permite trabalhar corretamente com coleções como Set ou chaves em dicionários, mesmo em caso de colisões de hash.
Exemplo de implementação:
class Person: Hashable {
let id: Int
let name: String
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id && lhs.name == rhs.name
}
}
Aqui, se dois objetos Person tiverem o mesmo hash (por exemplo, o mesmo id), o operador == será chamado para a comparação final.