Sobes.tech
Middle

O que é necessário fazer para que a estrutura do usuário se torne uma chave no dicionário?

sobes.tech IA

Resposta da IA

É necessário implementar o protocolo Hashable.

O protocolo Hashable herda de Equatable.

  • Equatable: Requer a implementação do operador de igualdade == para comparar duas instâncias de uma estrutura.
  • Hashable: Requer a implementação da propriedade hash(into:), que calcula o valor de hash para uma instância da estrutura.

Exemplo de implementação:

struct Coordinate: Hashable {
    let x: Int
    let y: Int

    // MARK: - Equatable
    static func == (lhs: Coordinate, rhs: Coordinate) -> Bool {
        return lhs.x == rhs.x && lhs.y == rhs.y
    }

    // MARK: - Hashable
    func hash(into hasher: inout Hasher) {
        hasher.combine(x)
        hasher.combine(y)
    }
}

// Uso em um dicionário
let coordinatesDictionary: [Coordinate: String] = [
    Coordinate(x: 0, y: 0): "Origin",
    Coordinate(x: 1, y: 1): "Point (1,1)"
]

print(coordinatesDictionary[Coordinate(x: 0, y: 0)]!)

Hasher é usado para gerar o valor de hash. O método combine aceita diferentes valores hasháveis e os combina para criar o hash final.