第 16 课2026.09.22
同一场景重建后,把上一课保存的页面栈恢复出来。
第 16 课:场景出现时恢复导航路径
- 日期:2026-09-22
- 课程序号:第 16 课
- 知识点:从
@SceneStorage解码NavigationPath
用途或适用场景
同一场景重建后,把上一课保存的页面栈恢复出来。
核心概念
场景存储保存的是 Data;先解码为 NavigationPath.CodableRepresentation,再构造 NavigationPath。没有数据或解码失败时保留空路径。
最小代码或操作示例
swift
import SwiftUI
struct LessonView: View {
@SceneStorage("savedPath") private var savedPath: Data?
@State private var path = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
NavigationLink("第 1 课", value: "lesson-1")
.navigationDestination(for: String.self) { id in Text(id) }
}
.onAppear(perform: restorePath)
}
private func restorePath() {
guard let savedPath,
let value = try? JSONDecoder().decode(
NavigationPath.CodableRepresentation.self, from: savedPath
) else { return }
path = NavigationPath(value)
}
}3~5 分钟练习
先让 savedPath 为 nil,再显示页面。
参考答案
restorePath() 直接返回,path 保持空路径,显示根页。
与上一课的联系
沿用第 15 课的 savedPath: Data? 与 path;本课只新增场景出现时的解码恢复;完成后下一课可在路径变化时自动更新保存的数据。
时效校验
时效校验:2026-09-24(Apple 当前 NavigationPath、SceneStorage、onAppear 官方 API;组合示例最低 iOS 16 / macOS 13,未见废弃标记)。