In Objective-C (and other languages) a relatively good default implementation of - (NSUInteger)hash might be:
- (NSUInteger)hash {
return 31u * [self.property1 hash] + [self.property2 hash];
}
Assuming both property1 and property2 return good values for hash.
This doesn't work in Swift's equivalent var hashValue: Int method defined on its Hashable protocol.
The equivalent Swift code is likely to overflow and this a runtime error in Swift.
var hashValue: Int {
return 31 * property1.hashValue + property2.hashValue // overflow-tastic
}
So my question is, what is the best technique for generating hash values (implementing Hashable) in Swift? Should I just use XOR? Though my understanding is that XOR is not ideal for creating uniform hash distributions. Perhaps something more exotic?