You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何简便判断枚举变量不等于带关联值的特定Case?

带关联值的Swift枚举状态判断方案

嘿,这个问题确实挺常见的——带关联值的枚举没法直接用!= .loaded来做非判断,不过除了你提到的switch和if case两种写法,还有个更清爽可复用的方案:给DisplayState枚举加个扩展,封装判断逻辑!

先回顾下我们的枚举和变量定义:

enum DisplayState{
    case loading
    case loaded(ViewModel)
    case noResults
    case error
}
var displayState:DisplayState = .loading

解决方案:添加计算属性

我们可以给枚举扩展一个计算属性,直接返回当前是否处于非.loaded状态,这样后续代码里就能像用普通布尔值一样判断:

extension DisplayState {
    var isNotLoaded: Bool {
        switch self {
        case .loaded: return false
        default: return true
        }
    }
}

之后使用的时候就超级简洁:

if displayState.isNotLoaded {
    // 执行你需要的操作
}

如果更习惯先判断是否是.loaded再取反,也可以这么写:

extension DisplayState {
    var isLoaded: Bool {
        if case .loaded = self { return true }
        return false
    }
}

// 调用时
if !displayState.isLoaded {
    // 执行操作
}

这种方式的好处是把状态判断的逻辑封装在枚举自身,不仅代码复用性拉满,而且调用时的可读性也比重复写switch或者if case模板代码强太多,后续如果枚举新增状态,只需要在扩展的switch里更新逻辑就行,不用改所有判断的地方。


内容的提问来源于stack exchange,提问作者Mark A. Donohoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:53:53