是否有针对具有关联值的枚举案例的速记布尔检查?

问题描述

我有这个代码片段:

if case .voice = mode { 
    return true 
} else { 
    return false 
}

可能有速记版本吗?例如:

.voice == mode ? true : false

mode 是具有关联值的枚举:

enum Mode { 
    case `default`
    case voice(VoiceMode) 
}

解决方法

没有内建的方法来检查枚举大小写的相等性而不检查关联值的相等性。如果您的枚举符合 Equatable,您可以使用相等运算符来比较两个枚举值,但是,您仍然无法执行 mode == Mode.voice,因为 Mode.voice 在没有VoiceMode 关联值。

您可以在枚举上定义一个计算属性,该属性仅比较案例,而不是它们的关联值。

enum Mode {
    case `default`
    case voice(VoiceMode)
    
    var isVoice: Bool {
        if case .voice = self {
            return true
        } else {
            return false
        }
    }
}