Sobes.tech
Junior — Middle

Swift dilində Hashable və Equatable protokolları arasındakı əlaqə nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Swift-də, Equatable və Hashable protokolları sıx əlaqəlidir, çünki Hashable, Equatable-dan irsən alır.

  • Equatable iki nümunəni bərabərlik üçün müqayisə etmək üçün == operatorunun tətbiqini tələb edir.
  • Hashable, Equatable-ı genişləndirir və obyektin hash kodunu qaytaran hashValue (və ya hash(into:)) xüsusiyyətinin tətbiqini tələb edir.

Əlaqə odur ki, obyektin hash kodunu hesablamaq üçün onun bərabərlik üçün müqayisə edilə bilməsi lazımdır, beləliklə hash-əsaslı kolleksiyalar (məsələn, Set və ya Dictionary) düzgün işləyə bilər.

Nümunə:

struct Person: Hashable {
    var id: Int
    var name: String

    static func == (lhs: Person, rhs: Person) -> Bool {
        return lhs.id == rhs.id
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
}

Burada, Person, Equatable və Hashable ilə uyğun gəlir və onu hash cədvəllərində istifadə etməyə imkan verir.