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

Swift如何定义包含其他case数组的枚举成员并解决编译报错?

错误原因
  • 遵守String原始值协议的枚举,所有case只能是对应字符串值的枚举实例,不能将存储数组的属性定义为case
  • 你编写的case typesArray = [type1, type2, type3]不符合枚举case的语法规则:String类型的枚举原始值必须是字符串字面量,数组不属于合法的原始值类型,因此触发编译报错。
正确调整代码

只需要把typesArray改为枚举的静态属性即可,不需要定义为case:

enum Types: String, Codable, CaseIterable {
    case type1
    case type2
    case type3
    case type4
    case type5
    
    // 若需要数组元素为枚举实例,用如下写法
    static let typesArray: [Types] = [.type1, .type2, .type3]
    
    // 若需要数组元素为字符串,和你原有写法返回值对齐,用如下写法即可
    // static let typesArray: [String] = [Types.type1.rawValue, Types.type2.rawValue, Types.type3.rawValue]
}
适配说明
  • 上述写法会自动实现三个协议的默认能力:String原始值自动匹配case名称作为对应字符串,调用rawValue即可获取;Codable自动实现基于字符串的编解码逻辑;CaseIterable自动生成allCases静态属性,包含所有枚举case。
  • 原有逻辑不需要做额外改造即可兼容使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:09:04