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

如何通过代码获取枚举中case语句的数量(不依赖关联值)

当然有可行方案啦!再也不用手动维护那个容易写错的static count变量了,给你两种实用的实现方式,都是完全不依赖关联值的:

方案一:利用CaseIterable协议(首推)

从Swift 4.2开始,官方提供了CaseIterable协议,只要让你的枚举遵守它,就能自动获取所有case的集合,直接通过count拿到数量,完全不用手动维护:

enum Stuff: Int, CaseIterable {
    case first = 0
    case second = 1
    case third = 2
    case forth = 3
}

// 直接用下面的方式获取数量,新增/删除case都会自动更新
print(Stuff.allCases.count) // 输出4

这个协议会自动为枚举生成allCases静态属性,它是包含所有case的数组,取count就是你要的case总数。以后不管你新增case还是删掉某个case,这个数值都会自动同步,再也不会出现手动改count漏改的情况。

方案二:利用Mirror反射(兼容旧版本Swift)

如果你的项目还在用Swift 4.2之前的版本,或者有特殊情况没法用CaseIterable,可以通过反射来实现自动计数:

enum Stuff: Int {
    case first = 0
    case second = 1
    case third = 2
    case forth = 3
    
    static var count: Int {
        // 通过Mirror获取枚举的元数据,children就是所有case的集合
        return Mirror(reflecting: self).children.count
    }
}

// 使用示例
print(Stuff.count) // 输出4

这里利用Mirror来获取枚举的类型元信息,它的children属性包含了所有定义的case,取这个集合的count就能得到case数量。不过这种方法的性能比CaseIterable略差一点,所以优先推荐第一种方案。

补充说明

这两种方法都完全不依赖枚举的关联值,哪怕你的枚举后续加入了带关联值的case(当然你的例子里是Int原始值枚举,没有关联值),也能正确统计case的总数。

内容的提问来源于stack exchange,提问作者Rob Bonner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:06:38