Sobes.tech
Junior — Middle

Mida tuleb tagada, et klassi objekt saaks kasutada võtmena sõnastikus?

sobes.tech AI

Vastus AI-lt

Selleks, et kasutada klassi objekti võtmena sõnastikus (näiteks Swift Dictionary või NSDictionary), tuleb tagada:

  1. Hash'itavus — objektil peab olema õigesti rakendatud hash meetod (hash Swiftis, hashValue Objective-C-s), et sõnastik saaks võtme kiiresti leida.

  2. Võrdluse sobivus — objekt peab õigesti rakendama võrdlusmeetodi (Equatable Swiftis, isEqual: Objective-C-s), et sõnastik saaks määrata, kas kaks võtit on võrdsed.

Swiftis tähendab see, et klass peab vastama Hashable ja Equatable protokollidele. Näide:

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"

Ilma nende meetodite õige rakendamiseta ei saa objekti kasutada võtmena sõnastikus.