修改模型字段为枚举后编译报错:需TravelMode遵循PersistentModel
SwiftData枚举字段编译错误解决方案
核心修复步骤
给
TravelMode枚举添加Codable协议:enum TravelMode: String, CaseIterable, Identifiable, Codable { case undefined, flight, car, train, hike, sail, other var id: Self { self } }由于你的枚举是基于
String的原始值枚举,Swift会自动合成Codable的实现,无需手动编写序列化/反序列化代码。(可选)若仍有问题,给模型中的枚举属性添加显式存储注解:
在Journey类的travelMode属性前加上@Attribute(.transformable(by: nil)),明确告诉SwiftData以可转换类型存储该枚举:@Model class Journey: Identifiable, Hashable { // 保留原有属性 var trip: String var name: String var date: Date var latitudeFrom: Double var longitudeFrom: Double var latitudeTo: Double var longitudeTo: Double @Attribute(.transformable(by: nil)) var travelMode: TravelMode? var details: String }
错误原因说明
报错提示TravelMode需遵循PersistentModel是个误导性提示——PersistentModel是给引用类型(比如@Model标记的类)用的,而你的枚举是值类型。SwiftData要求值类型存储时需支持Codable或Transformable,添加Codable协议后就能满足持久化要求,编译错误即可消除。
内容的提问来源于stack exchange,提问作者John Bennett
相关产品推荐
相关产品推荐

