Sobes.tech
Junior — Middle

Класстын объектисин словарьда ачкыч катары колдонуу үчүн эмне камсыз кылуу керек?

sobes.tech AI

AIден жооп

Sınıf obyekti sözlükte açar kimi istifadə etmək üçün (məsələn, Swift Dictionary və ya NSDictionary-də), aşağıdakı təmin edilməlidir:

  1. Hashlenebilirlik — obyekt düzgün şəkildə həyata keçirilmiş hash metoduna malik olmalıdır (hash Swift-də, hashValue Objective-C-də), beləliklə sözlük açarı tez tapa bilər.

  2. Bərabərlik üçün müqayisə — obyekt düzgün şəkildə müqayisə metodunu (Equatable Swift-də, isEqual: Objective-C-də) həyata keçirməlidir ki, sözlük iki açarın bərabər olub-olmadığını müəyyən edə bilsin.

Swift-də bu, sinifin HashableEquatable protokollarına uyğun olmasını tələb edir. Məsələn:

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 düzgün həyata keçirilməməsi halında, obyekt sözlükdə açar kimi istifadə oluna bilməz.