SuperAPI AI 工具集

axiom-sqlitedata-migration

数据与分析

查看项目

更新于 10-15 20:11

技能介绍

用途:帮助开发者判断是否应从 SwiftData 切换到 SQLiteData,并给出迁移流程与写法对照。资料来自 charleswiltgen/axiom 的技能页。

何时切换:出现 1 万条以上记录的性能问题、需要 CloudKit 记录共享(SwiftData 只能同步不能共享)、需要跨多表复杂查询、需要 Swift 6 并发的 Sendable 模型、@Model 类难以测试时,可考虑 SQLiteData;若仅做简单 CRUD 且满意 SwiftData,则建议保留。

模式对照:@Model class 对应 @Table nonisolated struct;@Attribute(.unique) 对应 @Column(primaryKey: true) 或 SQL UNIQUE;@Relationship 对应显式外键加 join 查询;@Query 对应 @FetchAll;@Environment(.modelContext) 对应 @Dependency(.defaultDatabase);隐式 save 对应显式 database.write { } 块;直接 init 插入对应 .Draft 类型。

能力与示例:文档给出 SwiftData 与 SQLiteData 的 Task 列表代码对照,展示增删改查写法;CloudKit 共享部分说明用 SyncEngine.share(record:) 生成 SharedRecord,再通过 CloudSharingView 呈现原生共享界面。性能对比表列出插入 5 万条、1 万条谓词查询、内存占用与冷启动的近似差异,并注明基准会随设备与数据形态变化。

数据迁移与限制:仅做 schema 迁移会丢失用户数据,必须先从 SwiftData 导出再导入 SQLiteData;示例用 FetchDescriptor 读取并批量 insert,再校验记录数。清单包括导出全部模型、迁移关系、核对数量、保留备份容器、用版本标记在首次启动运行。还给出渐进迁移策略与常见坑:关系转外键、级联删除需写进 SQL 模式、无自动反向关系需手动双向查询。