Sobes.tech
Junior — Middle

Ի՞նչ կապ կա Swift լեզվի մեջ Hashable և Equatable պրոտոկոլների միջև։

sobes.tech AI

Պատասխան AI-ից

Swift- ում Equatable և Hashable պրոտոկոլները սերտորեն կապված են, քանի որ Hashable-ը ժառանգում է Equatable-ից:

  • Equatable պահանջում է իրականացնել հավասարության օպերատոր ==, որը համեմատում է երկու օրինակների հավասարությունը:
  • Hashable ընդլայնում է Equatable-ը և պահանջում է իրականացնել hashValue հատկությունը (կամ hash(into:) մեթոդը), որը վերադարձնում է օբյեկտի հեշ-կոդը:

Կապը այն է, որ օբյեկտի հեշ-կոդը հաշվարկելու համար անհրաժեշտ է կարողանալ համեմատել օբյեկտները հավասարության համար, որպեսզի ճիշտ աշխատեն հեշ-կառուցված հավաքածուները (օրինակ, Set կամ Dictionary):

Օրինակ՝

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)
    }
}

Այստեղ, Person-ը համապատասխանում է Equatable և Hashable-ին, ինչը թույլ է տալիս օգտագործել այն հեշ-թերթերում։