Sobes.tech
Junior — Middle

Ko nepieciešams nodrošināt, lai klases objekts varētu tikt izmantots kā atslēga vārdnīcā?

sobes.tech AI

Atbilde no AI

Lai izmantotu klases objektu kā atslēgu vārdnīcā (piemēram, Swift Dictionary vai NSDictionary), ir jānodrošina:

  1. Hashējamība — objekts jābūt pareizi īstenotam hash metodam (hash Swift, hashValue Objective-C), lai vārdnīca varētu ātri atrast atslēgu.

  2. Vienlīdzības salīdzināšana — objekts jāīsteno pareizi salīdzināšanas metode (Equatable Swift, isEqual: Objective-C), lai vārdnīca varētu noteikt, vai divas atslēgas ir vienādas.

Swift tas nozīmē, ka klasei jāatbilst Hashable un Equatable protokoliem. Piemērs:

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"

Bez pareizas šo metožu īstenošanas, objekts nevar tikt izmantots kā atslēga vārdnīcā.