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
相关产品推荐
相关产品推荐

