Junior — Middle
Mit kell biztosítani egy osztályobjektum kulcsként való használatához egy szótárban?
sobes.tech MI
Válasz az MI-től
Az osztályobjektumok kulcsként való használatához szótárban (például Swift Dictionary vagy NSDictionary) biztosítani kell:
-
Hashelhetőség — az objektumnak helyesen implementált hash metódussal kell rendelkeznie (
hashSwiftben,hashValueObjective-C-ben), hogy a szótár gyorsan megtalálja a kulcsot. -
Egyenlőség szerinti összehasonlítás — az objektumnak helyesen kell implementálnia az összehasonlító metódust (
EquatableSwiftben,isEqual:Objective-C-ben), hogy a szótár meg tudja határozni, két kulcs egyenlő-e.
Swiftben ez azt jelenti, hogy az osztálynak megfelelnie kell a Hashable és Equatable protokolloknak. Például:
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"
A helytelenül megvalósított metódusok esetén az objektum nem használható kulcsként a szótárban.