SuperAPI AI 工具集

axiom-sqlitedata

数据与分析

查看项目

更新于 10-16 00:23

技能介绍

用途:SQLiteData 是 Point-Free 提供的类型安全 SQLite 持久化方案,可作为 SwiftData 的轻量替代,基于 GRDB 与 StructuredQueries,支持 CloudKit 同步。适用 iOS 17+、Swift 6 严格并发,MIT 许可。适合需要编译期校验查询、5 万条以上记录、值类型(struct)建模、CloudKit 记录共享的场景;简单 CRUD 或偏好 @Model 可选 SwiftData,复杂多表联接或自定义迁移可下沉到 GRDB。

主要能力:模型用 @Table nonisolated struct 定义,首个 let 属性为主键,默认值表示非空列,可选类型表示可空列;@Column 支持自定义表示与主键,@Ephemeral 标记不持久化属性。查询用 @FetchAll、@FetchOne 在 SwiftUI 中自动订阅变更,@Fetch 配合 .task(id:) 可随视图消失自动取消。支持过滤、排序、分页,静态辅助方法 Item.fetchAll(db)、Item.find(db, key:)。

使用方式:用 appDatabase() 创建 DatabaseQueue,经 DatabaseMigrator 注册迁移建表,并在 prepareDependencies 注册 defaultDatabase。所有写操作在 database.write { db in } 内执行,事务整体提交或回滚;插入用 Item.insert { Item.Draft(...) }.execute(db),可 .returning(.id) 取回生成主键;更新用 Item.find(id).update { } 或 Item.where(...).update { };删除同理。支持 UPSERT(onConflict/doUpdate)、批量插入和 #sql 宏写原生 SQL。

限制:write 块为同步,内部不能 await;谓词比较需用 .eq(#bind(...)) 等方法而非 ==;插入为静态方法,无实例 insert;模型需加 nonisolated;变更包需 .execute(db),否则不生效;UPDATE 顺序为先 where/find 再 update。关系通过显式外键列与 join/leftJoin 表达,不使用 @Relationship。CTEs、视图、自定义聚合、模式组合等进阶内容见 axiom-sqlitedata-ref 参考技能,本资料中相关内容与安装命令暂未提供。