Sobes.tech
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étodo hash(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.