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

修改模型字段为枚举后编译报错:需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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:46:03