SwiftUI 属性包装器系列 --- @AppStorage @SceneStorage

@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并不是为了保存完整的数据模型;应该用于小而简单的数据。 存储与当前场景相关的简单状态 保留的数据不敏感或不是关键任务

相关推荐
Lvan的前端笔记1 天前
SwiftUI:iOS 常用视图组件速查
ios·swiftui·swift
智购科技无人售货机工厂1 天前
自动售货机硬件选型避坑:单片机 / 树莓派 / ESP32 怎么选?~YH
人工智能·单片机·嵌入式硬件·r语言·swift·perl·symfony
游戏开发爱好者81 天前
iOS开发IDE有哪些 Xcode 和 快蝎 轻量替代方案
ide·vscode·ios·个人开发·xcode·swift·敏捷流程
2501_915921432 天前
从零开始学 Swift iOS 开发 iOS应用入门
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
末代iOS程序员华仔2 天前
Swift 的角色演变:从“主角”到“最佳配角”——iOS 应用被 Flutter 替换,Swift 变成辅助?
flutter·ios·swift
末代iOS程序员华仔3 天前
Cursor + GitOps:自动化运维新姿势
flutter·ios·swift
HarderCoder3 天前
SwiftUI 可复用视图设计解剖:从语义到 API 的完整实践
swiftui·swift
东坡肘子3 天前
当灵感跑在了结果前面 -- 肘子的 Swift 周报 #145
人工智能·swiftui·swift
HarderCoder4 天前
Swift 静态分派与动态分派:方法到底是如何被调用的
swift