我有一个简单的枚举:
enum Value {
case boolean(Bool)
case number(Double)
case string(String)
}
我正在编写一个玩具语言翻译器,性能对我来说很重要.给出这个人为制作的代码片段:
let d: Value = .number(1.2)
let stack: [Value] = [d]
我知道stack[0]
是definitely a .number
Value
,我想要得到它的关联值(即Double
).无论是if let
还是guard case
,我都想不出一种不需要条件判断的方法来做到这一点.
我想做的是这样的(这是无效的):
let result: Double = (stack[0] as! Value.number)
我知道这很管用:
guard case .number(let result) = stack[0] else {
// Never happens because I **know** stack[0] is a .number
}
// Now I can use result.
当我知道当前值的类型时,我正在try 避免条件判断,因为这是在热循环中发生的.