Junior — Middle
Qual é a relação entre os protocolos Hashable e Equatable na linguagem Swift?
sobes.tech IA
Resposta da IA
Em Swift, os protocolos Equatable e Hashable estão estreitamente relacionados, pois Hashable herda de Equatable.
- Equatable exige a implementação do operador de igualdade
==para comparar duas instâncias por igualdade. - Hashable estende Equatable e requer a implementação da propriedade
hashValue(ou do métodohash(into:)), que retorna o código hash do objeto.
A ligação é que, para calcular o código hash de um objeto, é necessário poder compará-lo por igualdade, para trabalhar corretamente com coleções baseadas em hashes (como Set ou Dictionary).
Exemplo:
struct Person: Hashable {
var id: Int
var name: String
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
Aqui, Person é compatível com Equatable e Hashable, permitindo seu uso em tabelas hash.