【问题标题】:Is there a shorthand boolean check for an enum case with associated value?是否对具有关联值的枚举案例进行速记布尔检查?
【发布时间】:2021-05-22 09:36:40
【问题描述】:

我有这个代码sn-p:

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

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

.voice == mode ? true : false

mode 是一个具有关联值的枚举:

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

【问题讨论】:

  • 我假设 Mode 在这里被简化,但如果不是,你可以声明它符合 Equatable 并简单地写 mode != .default

标签: swift enums pattern-matching equality


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多