@AppStorage
@AppStorage
属性包装器是对UserDefaults
的包装。这意味着它非常适合存储简单的键值对。当UserDefaults
的数据发生变化时,视图将重新加载。可以通过@AppStorage
为属性分配值来更新值。
sql
struct ContentView: View {
@AppStorage("lastTap") var lastTap: Double?
var dateString: String {
if let timestamp = lastTap {
return Date(timeIntervalSince1970: timestamp).formatted()
} else {
return "Never"
}
}
var body: some View {
Text("Button was last clicked on (dateString)")
Button("Click me") {
lastTap = Date().timeIntervalSince1970
}
}
}
注意事项:
@AppStorage
并不是为了保存完整的数据模型;应该用于小而简单的数据。
@SceneStorage
@SceneStorage
属性包装器与 @AppStorage
类似,只是它仅保留视图当前所在场景的本地数据。在 iOS 上,应用程序通常只有一个场景,但在 Mac 和 iPad 上,应用程序可以有多个场景。当场景被暂时拆除并稍后恢复时,您的场景存储将再次可用。如果场景被破坏,所有场景相关数据也会被破坏。
应该仅将场景存储用于对应用程序来说不重要的状态相关数据。
@SceneStorage
将以@AppStorage
类似的方式来使用:
sql
struct ContentView: View {
@SceneStorage("lastTap") var lastTap: Double?
var dateString: String {
if let timestamp = lastTap {
return Date(timeIntervalSince1970: timestamp).formatted()
} else {
return "Never"
}
}
var body: some View {
Text("Button was last clicked on (dateString)")
Button("Click me") {
lastTap = Date().timeIntervalSince1970
}
}
}
注意事项:
@SceneStorage
并不是为了保存完整的数据模型;应该用于小而简单的数据。 存储与当前场景相关的简单状态 保留的数据不敏感或不是关键任务