Sobes.tech
Junior — Middle

Sinf obyekti lug'atda kalit sifatida foydalanilishi uchun nima ta'minlanishi kerak?

sobes.tech AI

AIdan javob

Klassa obyekti lug‘atga kalit sifatida foydalanish uchun (masalan, Swift Dictionary yoki NSDictionary), quyidagilarni ta'minlash kerak:

  1. Hashlanish imkoniyati — obyektda to‘g‘ri amalga oshirilgan hash metod bo‘lishi kerak (hash Swiftda, hashValue Objective-Cda), shunda lug‘at kalitni tez topa oladi.

  2. Tenglikni solishtirish — obyektda to‘g‘ri amalga oshirilgan taqqoslash metodi (Equatable Swiftda, isEqual: Objective-Cda) bo‘lishi kerak, shunda lug‘at ikki kalit tengligini aniqlay oladi.

Swiftda bu shartlar uchun, klass Hashable va Equatable protokollariga mos kelishi kerak. Masalan:

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"

Agar bu metodlar to‘g‘ri amalga oshirilmasa, obyekt lug‘atda kalit sifatida ishlatilmaydi.