布尔值的哈希值可以转换为整数吗?

3

在一些情况下和一些代码中,我看到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,使用Swift4.2,如果切换为Swift4.0,则可以获得类似的结果。
现在,我做错了什么还是hashValue不可靠的转换方法?
2个回答

6
不,特别是如果您想要特定结果,hashValue不是将其他类型转换为Int的正确方法。
根据Hashable hashValue的文档:
“哈希值不能保证在程序的不同执行过程中相等。不要保存哈希值以在将来的执行中使用。”
Bool转换为Int的最简单解决方案是:
let someInt = someBool ? 1 : 0

2

hashValue 不是可靠的转换方法吗?

文档 中可以了解到:

哈希值不能保证在程序不同执行之间相等。请勿保存哈希值以在将来的执行中使用。


好的回答,谢谢!rmaddy 的回答更加明确,并提供了一些替代方法(虽然没有被要求),因此我决定标记他的回答。希望你能理解。我也给你的回答点了赞。 - IceFire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接