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

  1. Hashelhetőség — az objektumnak helyesen implementált hash metódussal kell rendelkeznie (hash Swiftben, hashValue Objective-C-ben), hogy a szótár gyorsan megtalálja a kulcsot.

  2. Egyenlőség szerinti összehasonlítás — az objektumnak helyesen kell implementálnia az összehasonlító metódust (Equatable Swiftben, 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.