SwiftUI自定义String类型枚举传参报类型转换错误求助
错误原因
- 你定义的
category属性类型是structuralCodes.Category枚举类型,不是String类型。虽然该枚举绑定了String类型的原始值,但Swift不会自动将String转换为对应的枚举实例,直接传入字符串会触发类型不匹配错误。 - 枚举的原始值只是枚举和对应类型转换的介质,本身不等同于枚举实例,必须显式完成转换或者直接传入枚举case。
解决方法
提供两种常用可选方案:
方案1:直接传入枚举case(最推荐)
编译期即可完成类型校验,性能最高,修改初始化代码如下:
var structuralcodes = [ structuralCodes(index: 1, title: "ASCE", icon: "wind", isFeatured: true, category: .asce, imageName: "ASCE"), structuralCodes(index: 2, title: "AISC", icon: "wind", isFeatured: false, category: .aisc, imageName: "AISC"), ]
上下文可自动推断枚举类型,所以可以直接使用.asce/.aisc的简写形式,无需写全枚举路径。
方案2:通过原始值显式构造枚举实例
如果你的分类值确实来源于接口、本地存储等字符串格式的数据源,可以调用枚举的原始值构造器生成实例:
// rawValue构造器为可失败构造器,返回Optional类型,建议添加兜底逻辑避免空值 structuralCodes(index: 1, title: "ASCE", icon: "wind", isFeatured: true, category: structuralCodes.Category(rawValue: "ASCE") ?? .asce, imageName: "ASCE")
内容的提问来源于stack exchange,提问作者officer_Krupke
相关产品推荐
相关产品推荐

