Bool.hashValue有效转换为Int吗?

问题描述 投票:2回答:2

在某些情况下和一些代码我看到hashValue用于将Bool转换为Int

但是,代码

let someValue = true
let someOtherValue = false

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

得到我的输出

-5519895559129191040
7814522403520016984

不过我会期待10

我使用XCode 10.0 beta 2(10L177m),MacOS High Sierra和Swift 4.2。我可以切换到Swift 4.0以获得同样的结果。

现在,有什么我做错了或hashValue没有可靠的转换方法?

swift hash type-conversion boolean swift4
2个回答
5
投票

不,hashValue不是将其他类型转换为Int的正确方法,特别是如果你想要特定的结果。

Hashable hashValue的文档:

在程序的不同执行中,哈希值不保证相等。不要保存在将来执行期间使用的哈希值。

Bool转换为Int最简单的解决方案是:

let someInt = someBool ? 1 : 0

2
投票

hashValue没有可靠的转换方法吗?

来自.hashValue Documentation

在程序的不同执行中,哈希值不保证相等。不要保存在将来执行期间使用的哈希值。

© www.soinside.com 2019 - 2024. All rights reserved.