Skip to content

@AppStorage-@SceneStorage:持久化状态

@AppStorage:持久化你的数据 💾

想让你的 SwiftUI 应用记住用户的偏好设置吗?@AppStorage 就是你的好帮手!它能轻松地将数据存储到 UserDefaults 中,即使应用关闭再重启,数据依然存在。是不是很棒?🎉

  • 简单易用: 只需要声明一个 @AppStorage 属性,SwiftUI 就会自动帮你处理数据的存储和读取。
  • 自动同步: 当属性值发生变化时,@AppStorage 会立即将新的值保存到 UserDefaults 中。
  • 支持多种数据类型: 可以存储 Int, Double, String, Bool, URL 等常见数据类型。
swift
@AppStorage("username") var username: String = "Guest"

这段代码声明了一个名为 username 的字符串属性,默认值为 "Guest"。每次 username 的值改变,都会自动保存到 UserDefaults 中,键名为 "username"。

@SceneStorage:为每个场景保存状态 🎬

@SceneStorage 类似于 @AppStorage,但它的作用范围更小,只在当前 Scene 中有效。Scene 可以理解为应用的一个窗口或标签页。这意味着,如果你的应用支持多窗口,每个窗口可以有自己独立的 @SceneStorage 数据。

  • 场景隔离: 每个 Scene 拥有独立的数据存储空间,互不干扰。
  • 临时存储: 当 Scene 关闭时,@SceneStorage 存储的数据也会被清除。
  • 适用于临时状态: 适合存储一些临时的、与特定场景相关的数据,例如当前页面的滚动位置、选中的选项等。
swift
@SceneStorage("textInput") var textInput: String = ""

这段代码声明了一个名为 textInput 的字符串属性,默认值为空字符串。它存储在当前 Scene 的存储空间中,当 Scene 关闭时,数据也会被清除。

如何选择:@AppStorage vs @SceneStorage 🤔

选择哪个取决于你的需求!

  1. 数据持久性:
    • @AppStorage: 长期存储,应用重启后数据依然存在。
    • @SceneStorage: 临时存储,Scene 关闭后数据丢失。
  2. 作用范围:
    • @AppStorage: 全局范围,整个应用都可以访问。
    • @SceneStorage: 场景范围,只在当前 Scene 中有效。

总的来说,如果你需要存储用户的偏好设置、登录状态等需要长期保存的数据,选择 @AppStorage。如果只是需要存储一些临时的、与特定场景相关的数据,选择 @SceneStorage

实际应用场景举例 💡

  • @AppStorage:
    • 存储用户的主题偏好设置(亮色/暗色模式)。
    • 记录用户是否已经看过新手引导。
    • 保存用户的登录状态。
  • @SceneStorage:
    • 存储当前页面的滚动位置。
    • 记录用户在表单中输入的内容(临时保存,防止意外丢失)。
    • 保存用户在编辑器中打开的文件列表。

希望这些解释能帮助你更好地理解 @AppStorage@SceneStorage 的用法! 🚀 记住,选择合适的属性包装器,能让你的 SwiftUI 应用更加强大和用户友好。

本站使用 VitePress 制作