Sobes.tech
Junior — Middle

Sınıf obyektinin lüğətdə açar kimi istifadə olunması üçün nə təmin edilməlidir?

sobes.tech Süni İntellekt

AI-dan cavab

Sınıf nesnesini sözlükte anahtar olarak kullanmak (örneğin, Swift Dictionary veya NSDictionary'de), aşağıdakilerin sağlanması gerekir:

  1. Hashlenebilirlik — nesnenin doğru şekilde uygulanmış bir hash yöntemi olmalı (hash Swift'te, hashValue Objective-C'de), böylece sözlük anahtarı hızlıca bulabilir.

  2. Eşitlik karşılaştırması — nesne, doğru şekilde Equatable veya isEqual: yöntemiyle karşılaştırılmalı, böylece sözlük iki anahtarın eşit olup olmadığını belirleyebilir.

Swift'te bu, sınıfın Hashable ve Equatable protokollerine uygun olması anlamına gelir. Örneğin:

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"

Bu metodların doğru şekilde uygulanmaması durumunda, nesne sözlükte anahtar olarak kullanılamaz.