Bool.hashValue допустимо конвертировать в Int? - PullRequest
0 голосов
/ 31 августа 2018

В некоторых случаях и в некотором коде я видел, что hashValue используется для преобразования Bool в Int.

Однако код

let someValue = true
let someOtherValue = false

print(someValue.hashValue)
print(someOtherValue.hashValue)

дает мне вывод

-5519895559129191040
7814522403520016984

Впрочем, я бы ожидал 1 и 0.

Я использую XCode 10.0 beta 2 (10L177m), MacOS High Sierra с Swift 4.2. Я могу переключиться на Swift 4.0, чтобы получить аналогичные результаты.

Теперь, я что-то не так делаю или hashValue нет надежного метода преобразования?

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Нет, hashValue - неправильный способ преобразования какого-либо другого типа в Int, особенно если вам нужны конкретные результаты.

Из документации на Hashable hashValue:

Не гарантируется, что значения хеш-функции будут одинаковыми при разных исполнениях вашей программы. Не сохраняйте хеш-значения для использования в будущем.

Самое простое решение для преобразования Bool в Int:

let someInt = someBool ? 1 : 0
0 голосов
/ 31 августа 2018

Разве hashValue не является надежным методом преобразования?

Из .hashValue Документации :

Значения хеш-функции не гарантируются равными для разных исполнений вашей программы. Не сохраняйте хеш-значения для использования в будущем.

...