2 Star 22 Fork 10

小弟调调/swiftui-example

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
README.md 1.53 KB
一键复制 编辑 原始数据 按行查看 历史

什么是 @SceneStorage 属性包装器?

如果您想为每个屏幕保存唯一的数据,则应使用 SwiftUI@SceneStorage 属性包装器。 它的工作方式类似于 @AppStorage,为您提供了一个名称来保存内容以及一个默认值,但是它不是使用 UserDefaults 而是用于状态恢复 - 甚至可以与多种复杂的多场景一起使用 iPadOS 中我们经常看到的设置。

例如,如果您有一个文本编辑器并想存储用户输入的内容,则应使用以下代码:

struct ContentView: View {
    @SceneStorage("text") var text = ""

    var body: some View {
        #if os(iOS)
        NavigationView {
            TextEditor(text: $text)
        }
        .navigationViewStyle(StackNavigationViewStyle())
        #else
        NavigationView {
            TextEditor(text: $text)
        }
        #endif
    }
}

注意:我在此处使用了 StackNavigationViewStyle,因为它迫使 iPad 将所有空间分配给我们的文本编辑器。

因为它使用 @SceneStorage,所以 SwiftUI 将自动确保每个场景实例都有其自己的文本副本 – 如果同时运行应用程序,则两者都会正确保存和恢复其数据。

现在,在使用 @SceneStorage 之前,Apple有一些重要警告:

  • 不要保存大量数据; 保存状态恢复所需的一切。
  • 永远不要将敏感数据存储在场景存储中,因为它不安全。
  • 如果用户转到应用程序切换器并销毁了您的应用程序,则场景存储也将被销毁。
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Swift
1
https://gitee.com/jaywcjlove/swiftui-example.git
git@gitee.com:jaywcjlove/swiftui-example.git
jaywcjlove
swiftui-example
swiftui-example
main

搜索帮助