如何将计算值转换为文字以进行枚举初始化

Jee*_*eef 2 enums swift

我的枚举遇到了一个问题,因为我想将case初始化为double值PI / 180。有没有办法通过常量或一些时髦的魔术来获取此计算值并将其转换为文字,以便我可以初始化枚举?

我宁愿不必做3.14....-我宁愿使用实际的编译器和硬件对此值的表示形式。

所以我的第一个尝试是:

public enum ANGLE_TYPE : Double {

    case DEGREES = Double(CGFloat(M_PI / 180.0))
    case RADIANS = 1.0
}
Run Code Online (Sandbox Code Playgroud)

我不断收到错误枚举大小写的原始值必须是文字

第二次尝试是:

public enum ANGLE_TYPE : Double {
  let d : Double = Double(CGFloat(M_PI / 180.0))

case DEGRESS = d
}
Run Code Online (Sandbox Code Playgroud)

和我得到同样的错误。

有人可以告诉我如何进行此操作。

nhg*_*rif 7

您只能将文字用于类型支持的枚举的原始值。

为了使它起作用,您必须计算要执行的计算的原始值,并将其作为近似值粘贴到其中:

public enum ANGLE_TYPE : Double {
    case DEGREES = 0.0174532925199433
    case RADIANS = 1.0
}
Run Code Online (Sandbox Code Playgroud)

唯一的其他选择是没有类型支持的枚举,并手动提供rawValue属性:

public enum ANGLE_TYPE {
    case DEGREES, RADIANS

    var rawValue: Double {
        get {
            switch self {
            case .DEGREES:
                return Double(CGFloat(M_PI / 180.0))
            case .RADIANS:
                return 1.0
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这可能是有道理的,因为这意味着您没有init(rawValue:Double)初始化程序,在这种情况下,这可能没有太多意义。

附带说明,这全都没必要。我更喜欢这样的东西:

public enum AngleMeasureUnit {
    case Degrees, Radians
}
Run Code Online (Sandbox Code Playgroud)