mcpField
S
sqlite-data

sqlite-data

github.com/johnrogers数据与数据库233186 次安装41 周前更新
代码仓库

关于 sqlite-data

这是一份使用 SQLiteData 在 Swift 中构建类型安全 SQLite 数据层的技能指南,涵盖表模型、查询、写入、迁移、SwiftUI 集成和 CloudKit 同步模式。

主要功能

  1. 01通过 Swift 宏定义类型安全表模型
  2. 02Fetch 包装器与查询模式
  3. 03事务写入与数据库迁移
  4. 04SwiftUI 和 UIKit 集成指南
  5. 05CloudKit 同步与测试参考

适用场景

  1. 01为 Swift 应用建模 SQLite 表
  2. 02添加查询和事务式数据库写入
  3. 03通过迁移规划数据库结构变更
  4. 04将数据库数据接入 SwiftUI 视图

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/johnrogers/claude-swift-engineering --skill sqlite-data

安装后在 Claude Code 中输入/sqlite-data确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
advanced-optimization.md
advanced-queries.md
cloudkit.md
dependencies.md
migrations.md
models.md
queries-advanced.md
queries-basics.md
schema-composition.md
testing.md
views-integration.md
views-swiftui.md
writes.md

详细介绍

SQLite Data

SQLiteData 通过 Swift 宏提供类型安全的 SQLite 访问,简化数据库建模和查询,同时自动处理 CloudKit 同步、迁移和异步模式。

参考资料加载指南

只要有哪怕一丝可能需要用到相关内容,就务必加载参考文件。 有上下文总比遗漏模式或出错好。

参考资料何时加载
表模型使用 @Table 定义表、设置主键、列或枚举时
查询 - 基础使用 @FetchAll、@FetchOne、@Selection、筛选、排序或连接时
查询 - 高级使用 FetchKeyRequest 搭配 @Fetch、动态查询、递归 CTE 或直接读取时
写入插入、更新、插入或更新记录、删除记录或管理事务时
视图 - SwiftUI在 SwiftUI 视图中使用 @FetchAll/@FetchOne、@Observable 模型或动画时
视图 - 集成集成 UIKit、动态加载查询、集成 TCA 或使用 observe {} 时
迁移使用 DatabaseMigrator 或 #sql() 宏创建数据库迁移时
CloudKit 同步设置 CloudKit 私有数据库同步、共享或同步代理时
依赖项通过 @Dependency 注入数据库/同步引擎、设置引导模式或集成 TCA 时
测试设置测试数据库、填充数据或为 SQLite 代码编写断言时
高级 - 查询实现触发器、自定义数据库函数或全文搜索(FTS5)时
高级 - 优化调优性能、使用索引、自定义聚合、JSON 聚合或自连接时
架构组合使用 @Selection 列组、单表继承或数据库视图时

核心工作流

使用 SQLiteData 时:

  1. 使用 @Table 宏定义表模型
  2. 在视图或 @Observable 模型中使用 @FetchAll/@FetchOne 属性包装器
  3. 通过 @Dependency(\.defaultDatabase) 访问数据库
  4. 在 database.write { } 事务中执行写入
  5. 首次使用前设置迁移

常见错误

  1. N+1 查询模式 — 在循环中逐条加载记录(例如,先获取用户,再单独获取该用户的所有帖子)会严重影响性能。请改用连接或批量获取。

  2. 架构变更时缺少迁移 — 修改 @Table 却不创建迁移,会导致运行时崩溃。部署前,务必为架构变更创建迁移。

  3. 事务处理不当 — 在 database.write { } 代码块之外运行耗时事务,可能导致死锁或数据丢失。请保持写入代码块简短且专注。

  4. 忽略 CloudKit 同步代理 — 设置 CloudKit 同步却不实现 SyncDelegate,意味着你将无法处理错误和解决冲突。生产环境中请实现所有代理方法。

  5. 在 SwiftUI 视图中过度获取 — 使用 @FetchAll 却不筛选或限制,可能会加载数千条记录,导致界面卡顿。请使用谓词、限制和排序,以减少内存占用。

评论

支持 Markdown