gpt4 book ai didi

swift - "Raw value for enum case is not unique"用于具有 Float 原始值的 Swift 枚举

转载 作者:IT王子 更新时间:2023-10-29 05:48:47 24 4
gpt4 key购买 nike

根据 The Swift Programming Language ,我应该能够使用“字符串、字符或任何整数或 float 类型”的原始值创建一个 Swift 枚举。但是当我尝试时:

enum BatteryVoltage: Float {
case v3v7 = 3.7
case v5v0 = 5.0
case v7v4 = 7.4
case v11v1 = 11.1
case v12v0 = 12.0
}

...我得到一个编译错误:

Raw value for enum case is not unique

在 v7v4 线上。它编译得很好,那个被注释掉了。但是啊,它看起来很独特。如果我将值设置为 7.41、7.3 或其他值,它可以正常编译。这是怎么回事? swift 错误?

最佳答案

它肯定说您可以,但不要在需要比较相等性的地方使用浮点值(尤其是Float)——只是不能保证精度足够好。除非出于兼容性原因绝对需要使用 Float,否则请始终使用 Double

在这种情况下,它似乎遇到了麻烦,因为 (a) 第三种情况是第一种情况的 2 倍,以及 (b) 我不知道的其他一些因素。使用 3.3/6.63.4/6.83.6/7.2 也给了我这个问题,但是 3.5/7.0 没有。但是,我可以通过将最后一个案例更改为 22.2 (2x 11.1) 来显示它。

这里有一个解决方法——使用一个典型的基于 Int 的枚举,并提供一个 doubleValue 属性:

enum BatteryVoltage: Int {
case v3v7
case v5v0
case v7v4
case v11v1
case v12v0

var doubleValue: Double {
switch self {
case .v3v7: return 3.7
case .v5v0: return 5.0
case .v7v4: return 7.4
case .v11v1: return 11.1
case .v12v0: return 12.0
}
}
}

有一些nice additional features of enums如果它们是基于 Int 的,您就可以利用。

关于swift - "Raw value for enum case is not unique"用于具有 Float 原始值的 Swift 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com