В Objective-C (и других языках) относительно хорошая реализация по умолчанию - (NSUInteger)hash
может быть:
- (NSUInteger)hash {
return 31u * [self.property1 hash] + [self.property2 hash];
}
Предполагая, что property1
и property2
возвращают хорошие значения для hash
.
Это не работает в методе Swift, эквивалентном var hashValue: Int
, определенном в его протоколе Hashable
.
Эквивалентный код Swift, вероятно, переполняется, и это ошибка времени выполнения в Swift.
var hashValue: Int {
return 31 * property1.hashValue + property2.hashValue // overflow-tastic
}
Итак, мой вопрос: каков наилучший метод генерации хэш-значений (реализация Hashable) в Swift? Должен ли я просто использовать XOR? Хотя я понимаю, что XOR не идеален для создания равномерных распределений хэшей. Возможно, что-то более экзотическое?