第 17 课2026.09.23
用户进入或返回课程页时,及时更新场景保存的导航数据。
第 17 课:导航路径变化时自动保存
- 日期:2026-09-23
- 课程序号:第 17 课
- 知识点:当前
onChange(of:initial:_:)修改器
用途或适用场景
用户进入或返回课程页时,及时更新场景保存的导航数据。
核心概念
NavigationPath 可比较;当前推荐的零参数 onChange 闭包在路径变化后执行保存。旧的单参数 onChange(of:perform:) 已废弃,不用于本课示例。
最小代码或操作示例
swift
// 沿用第 16 课 LessonView 中的 path、savedPath 和 NavigationStack。
NavigationStack(path: $path) {
NavigationLink("第 1 课", value: "lesson-1")
.navigationDestination(for: String.self) { id in Text(id) }
}
.onAppear(perform: restorePath)
.onChange(of: path, initial: false) {
if let value = path.codable {
savedPath = try? JSONEncoder().encode(value)
}
}3~5 分钟练习
进入“第 1 课”后返回,比较两次 savedPath。
参考答案
进入时保存含一个元素的路径;返回后保存空路径。该值是场景恢复数据,不是长期持久化数据库。
与上一课的联系
沿用第 16 课的 path、savedPath 与 restorePath();本课只新增路径变化后的自动编码保存;完成后下一课可在存储数据损坏时清除无效值。
时效校验
时效校验:2026-09-24(Apple 当前 onChange(of:initial:_:) 与 NavigationPath API;新重载最低 iOS 17 / macOS 14,未废弃;旧 onChange(of:perform:) 已废弃,仅作迁移说明)。