Junior — Middle
O que é necessário garantir para usar um objeto de classe como chave num dicionário?
sobes.tech IA
Resposta da IA
Para usar um objeto de classe como chave num dicionário (por exemplo, em Swift Dictionary ou NSDictionary), é necessário garantir:
-
Hashabilidade — o objeto deve ter um método de hash corretamente implementado (
hashem Swift,hashValueem Objective-C), para que o dicionário possa encontrar a chave rapidamente. -
Comparabilidade para igualdade — o objeto deve implementar corretamente o método de comparação (
Equatableem Swift,isEqual:em Objective-C), para que o dicionário possa determinar se duas chaves são iguais.
Em Swift, isso significa que a classe deve cumprir os protocolos Hashable e Equatable. Por exemplo:
class Person: Hashable {
var id: Int
var name: String
init(id: Int, name: String) {
self.id = id
self.name = name
}
static func == (lhs: Person, rhs: Person) -> Bool {
return lhs.id == rhs.id
}
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
var dict: [Person: String] = [:]
dict[Person(id: 1, name: "Alice")] = "Developer"
Sem a implementação correta destes métodos, o objeto não poderá ser usado como chave num dicionário.