Sobes.tech
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:

  1. Hashabilidade — o objeto deve ter um método de hash corretamente implementado (hash em Swift, hashValue em Objective-C), para que o dicionário possa encontrar a chave rapidamente.

  2. Comparabilidade para igualdade — o objeto deve implementar corretamente o método de comparação (Equatable em 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.