6.2 KiB
6.2 KiB
部门课 07:习惯印章簿与轻量持久化
教学目标
- 区分
@State临时状态和跨 App 启动保留的持久化数据。 - 知道不同形态的数据适合不同保存方式,而不是所有内容都使用同一种工具。
- 理解
@AppStorage适合少量、简单、非敏感的设置或偏好。 - 认识
@AppStorage中存储标识、默认值、当前值和界面 Binding 的关系。 - 认识 SwiftData 中
@Model、ModelContainer、ModelContext和@Query的基本职责。 - 区分尚未确认的
@State输入草稿和已经插入 SwiftData 的持久记录。 - 能追踪以下两条数据流:
简单设置
→ @AppStorage
→ App 重启后恢复
输入备注
→ 创建 HabitStamp
→ ModelContext 插入并保存
→ @Query 取得记录
→ List 更新
→ App 重启后恢复
- 知道 SwiftData 模型具有可供列表区分的持久身份,本节不要求手动建立 UUID。
- 能通过彻底终止并重新启动同一个 App,判断数据是否真正保存。
教学内容
授课干部使用“喝水印章簿基础版”作为课堂 Demo,学员课后完成同源的“我的习惯印章簿”。
Demo 包含:
- 一个由
@AppStorage保存的习惯名称; - 一个由
@State保存的印章备注草稿; HabitStampSwiftData 模型,包含简短备注和创建时间;- 一个盖章按钮;
- 使用
@Query展示的印章数量和记录列表; - App 重新启动后的数据恢复。
课堂按以下方向讲解:
- 先使用临时状态保存习惯名称,重新运行后观察数据消失。
- 改用
@AppStorage,认识存储标识和默认值,再次验证跨启动恢复。 - 说明单一设置与多条记录的区别,引出 SwiftData。
- 定义包含备注和创建时间的
HabitStamp模型。 - 为 App 配置相应的模型存储容器。
- 从 SwiftUI 环境取得
ModelContext,使用@Query取得已有印章。 - 使用
@State保存尚未确认的备注草稿。 - 点击按钮后检查空内容、创建印章、插入 context,并清空草稿。
- 观察
@Query和List如何随新记录更新。 - 彻底结束并重新启动同一个 App,确认习惯名称和多条印章记录均被恢复。
本节采用授课干部 Demo 讲解型:
- 授课干部提前完成基础版并通过 Build/Run。
- 课堂实际敲写和解释关键数据链路。
- 保留完成版作为现场演示失败时的备用。
- 学员主要观察、预测、追踪数据和讨论,不要求同步跟抄。
- 学员课后参考 Demo、步骤资料或 AI 完成同源作品。
共同内容只使用 SwiftData 的新增和读取能力,不扩展为完整 CRUD。本节不讲:
- 编辑、删除、撤销和复杂表单;
- 查询筛选、排序原理和关系模型;
- 多个习惯、每日唯一打卡、连续天数和漏签判断;
- 提醒通知、日历、统计图和云同步;
- Schema 迁移、数据库底层原理和架构分层;
- 直接操作
UserDefaults、Codable 文件或 Keychain; - 敏感信息保存。
@AppStorage 基于 UserDefaults,适合简单的非敏感设置;SwiftData 通过模型、容器、上下文和查询管理结构化记录。后续细化备课时可参考 Apple 的 AppStorage、UserDefaults 和 SwiftData 跨启动保存。
课后作业
作业方向为“我的习惯印章簿”。具体题目、项目目录、分支、Commit、PR 标题和提交期限以后写入独立的课后作业文档。
最低完成标准
- 项目能够 Build/Run。
- 选择一个轻松、非敏感的习惯主题。
- 使用
@AppStorage保存习惯名称,并提供合理默认值。 - 定义包含简短备注和创建时间的 SwiftData 印章模型。
- 正确配置模型容器,并使用
ModelContext插入记录。 - 使用
@State保存尚未提交的备注草稿。 - 空备注不能生成印章。
- 成功盖章后清空输入框。
- 使用
@Query读取记录,并显示印章数量和记录列表。 - 能在一次运行中连续加入多枚印章。
- 彻底结束并重新启动 App 后,习惯名称和已有印章仍然存在。
- 至少完成一处主题文字、图标或配色修改。
达到最低标准即可视为完成,不要求视觉精致度、额外模型或完整数据管理功能。
建议完成标准
鼓励选择一项或多项探索:
- 增加空印章簿提示。
- 调整日期的显示形式。
- 让最新印章优先显示。
- 自定义印章图标、颜色或卡片样式。
- 增加第二个由
@AppStorage保存的简单偏好。 - 尝试删除单条印章或清空全部印章,并考虑是否需要确认。
- 使用 AI 解释局部代码、排查错误或完成一处小改造,再自行运行验证。
建议内容不影响基础作业通过,不要求发展成完整习惯管理 App。
验收方式
- 学员通过个人 Fork 和本周作业分支,向部门公开仓库提交完整项目源码 PR。
- 本节需要证明跨启动恢复,可通过约定渠道发送简短运行视频,展示修改习惯名称、添加印章、彻底结束 App、重新启动后数据仍然存在。
- 授课干部也可以取得 PR 源码,在自己的模拟器中完成同样验证。
- 下节课可选择少量作品轻量复习,可以现场运行,也可以围绕以下问题交流:
- 哪个值由
@AppStorage保存; - 哪些内容仍然只是
@State; @Model、容器、context 和 query 分别承担什么作用;- 为什么重新启动后记录仍然存在。
- 哪个值由
- 回答不完整用于发现共同问题和安排复习,不用于排名或淘汰。
- 未完成时允许提交 Draft PR,说明当前状态、完整错误和已经尝试的步骤。
验收只判断最低完成标准。建议完成内容不影响基础作业通过,课纲不规定视频编码、文件格式、大小、完整命令或其他操作细节。
源码提交、工具故障时的参与记录和隐私边界按共同安排执行;具体材料与操作细节由授课干部在备课阶段准备。