如何在Swift中将枚举类型强制转换为Double



我有一个可编码的Enum,它可以采用字符串或双精度的形式,因为我得到的JSON响应可以是字符串或双位数。我需要从枚举中提取double,但我不知道为什么。

enum greeksEnum: Codable, Equatable
{
func encode(to encoder: Encoder) throws {

}

case double(Double), string(String)
init(from decoder: Decoder) throws
{
if let double = try? decoder.singleValueContainer().decode(Double.self)
{
self = .double(double)
return
}

if let string = try? decoder.singleValueContainer().decode(String.self)
{
self = .string(string)
return
}

throw greekError.missingValue
}

enum greekError:Error
{
case missingValue
}
}

如何将double值提取到double变量中?

这就是我比较字符串的方式:

if (volatility[0] == optionsApp.ExpDateMap.greeksEnum.string("NaN"))
{
}

但是,当我尝试将枚举类型强制转换为Double类型时,我会遇到这个错误。

self.IV = Double(volatility[0])

初始化程序"init(_:("要求"ExpDateMap.greeksEnum"符合"BinaryInteger">

使用switch运算符检查枚举的大小写并提取其关联值:

let x: GreeksEnum = .double(3.14)
switch x {
case .double(let doubleValue):
print("x is a double: (doubleValue)")
case .string(let stringValue):
print("x is a string: (stringValue)")
}

如果您只需要一个案例而不是所有案例,请使用if-case-letguard-case-let:

if case .double(let doubleValue) = x {
print("x is a double: (doubleValue)")
}

提示:总是用大写单词命名你的类型(即GreeksEnumGreekError,而不是greeksEnumgreekError,这是Swift中的常见标准(。

相关内容

  • 没有找到相关文章

最新更新