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

如何解决创建SwiftData #Predicate时的编译器错误?

解决SwiftData #Predicate触发Codable编译错误的方案

问题原因

在静态方法中直接引用局部创建的Item实例属性时,#Predicate宏会尝试对整个Item实例进行序列化(因需要捕获外部变量),而默认的@Model类并不遵循Codable协议,因此触发编译错误。

修复方法

将需要比较的属性值提取为单独的基础类型变量(比如String),再在#Predicate中引用这个变量,避免宏处理整个Item实例:

extension Item {
    static func foo() {
        let item = Item(timestamp: .now)
        let targetId = item.id // 提取id到单独变量
        let pred = #Predicate<Item> { $0.id == targetId }
    }
}

其他尝试的问题说明

  • 手动添加Codable协议:@Model类的底层实现和Codable存在冲突,会导致运行时错误,不建议这么做。
  • 修改id类型或遵循Identifiable:这些操作未解决宏捕获外部实例的核心问题,因此无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:22:34