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:
-
Hash'itavus — objektil peab olema õigesti rakendatud hash meetod (
hashSwiftis,hashValueObjective-C-s), et sõnastik saaks võtme kiiresti leida. -
Võrdluse sobivus — objekt peab õigesti rakendama võrdlusmeetodi (
EquatableSwiftis,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.