Ваша реализация ==
неверна.Не сравнивайте значения хешей.Сравните фактические значения.Помните, что два неравных значения могут иметь одно и то же значение хеш-функции.
Ваша реализация hash
не должна использовать случайные числа.Удалить эти строки.Значение хеш-функции для данного значения должно быть устойчивым (по крайней мере, во время одного выполнения приложения).Вы не можете искать значения в словаре хэша ключей, которые постоянно меняются.
Самое простое решение, в этом случае, это позволить компилятору генерировать и ==
, и hash(into:)
.Тогда ваш код становится:
enum ObservingType: Hashable {
case messages(codeId: Int, codeTwoId: Int)
case allMessages
case threadMessages(otherId: Int)
}
Это намного проще, и теперь вы можете использовать enum
в качестве ключей для словаря.