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 propriedadehash(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.