Dipesh Pokhrel
Dipesh Pokhrel

Reputation: 432

Why Hashable protocol forces variable to be comply with Equatable protocol?

My confusion starts with the below code.

class Student : Hashable {
    
    func hash(into hasher: inout Hasher) {
        hasher.combine(firstName)
        hasher.combine(lastName)
        hasher.combine(stateName)
        hasher.combine(villageName)
    }
    var firstName: String?
    var lastName: String?
    var stateName: String?
    var villageName: String?
} 

So far as my knowledge on Hashable, it makes the variable uniquely identifiable by mapping it to some key, However, I don't foresee any reason which should force the variable to be equatable always. If there is no comparison operation to be done in the class created above then it looks un-necessary to put an extra protocol "Equatable"? Is there any reason which I could not visualize?

Upvotes: 0

Views: 185

Answers (1)

New Dev
New Dev

Reputation: 49590

Because any use of hashing to locate objects (e.g. in a Dictionary) needs to handle hashing collisions - that is when different (unequal) objects have the same hash value.

When that happens, there needs to be a way to check objects for equality.

Upvotes: 4

Related Questions