gpt4 book ai didi

swift - 如何将计算值转换为枚举初始化的文字

转载 作者:可可西里 更新时间:2023-11-01 00:37:32 26 4
gpt4 key购买 nike

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

我宁愿不必执行 3.14.... - 我宁愿使用该值的实际编译器和硬件计算表示。

所以我的第一次尝试是:

public enum ANGLE_TYPE : Double {

case DEGREES = Double(CGFloat(M_PI / 180.0))
case RADIANS = 1.0
}

我一直收到错误Raw value for enum case must be a literal

第二次尝试是:

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

case DEGRESS = d
}

我得到了同样的错误。

有人可以告诉我该怎么做吗。

最佳答案

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

要使其正常工作,您必须计算您正在执行的计算的原始值并将该文字作为近似值粘贴:

public enum ANGLE_TYPE : Double {
case DEGREES = 0.0174532925199433
case RADIANS = 1.0
}

唯一的其他选择是有类型支持的枚举并手动提供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
}
}
}
}

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

作为旁注,这个全部大写的东西真的没有必要。我更喜欢这样的东西:

public enum AngleMeasureUnit {
case Degrees, Radians
}

关于swift - 如何将计算值转换为枚举初始化的文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31215825/

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