如何使用 if 逻辑或三元运算符在 Swift 中设置枚举案例的 rawValue?

Mic*_*Bao 2 enums ternary-operator ios swift

我试图根据设备是否是 iPhoneX 设置枚举的 rawValues,我将其存储为布尔值 isiPhoneX。如果 isiPhoneX 为 true,我希望 rawValue 为 0.0,如果不是,则为 1.0。似乎三元运算符不符合 rawValue 。但这个问题有任何解决方法/解决方案吗?

public enum Angles: Double {
   case angle1 = isiPhoneX ? 0.0 : 1.0
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

“Angles”声明原始类型“Double”,但不符合 RawRepresentable 并且无法合成一致性

当前面的原始值不是整数时,枚举案例必须声明原始值

枚举大小写的原始值必须是文字

更新:我没有提到我还有其他不需要三元逻辑的情况,我意识到这现在是相关的。一个更准确的例子:

public enum Angles: Double {
   case angle1 = isiPhoneX ? 0.0 : 1.0
   case angle2 = 5.0
   case angle3 = 6.0
}
Run Code Online (Sandbox Code Playgroud)

小智 5

RawValue 必须在编译时决定。您可以拥有计算属性,您可以将自定义逻辑放入 switch case 中,如下所示:

public enum Angles {
   case angle1

    var doubleValue: Double {
        switch(self) {
            case .angle1: return isiPhoneX ? 0.0 : 1.0
        }
    }
}
Run Code Online (Sandbox Code Playgroud)