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

相关推荐
大熊猫侯佩14 小时前
反抗军工程师的 “苹果智能” 实战指南:用本机基础模型打造 AI 利刃
ai编程·swift·apple
YungFan1 天前
iOS26适配指南之UIViewController
ios·swift
吴Wu涛涛涛涛涛Tao2 天前
基于TCA构建Instagram克隆:SwiftUI状态管理的艺术
ios·swiftui
HarderCoder4 天前
我们真的需要 typealias 吗?——一次 Swift 抽象成本的深度剖析
swift
HarderCoder4 天前
ByAI-Swift 6 全览:一份面向实战开发者的新特性速查手册
swift
HarderCoder4 天前
Swift 中 let 与 var 的真正区别:不仅关乎“可变”与否
swift
HarderCoder4 天前
深入理解 Swift 6.2 并发:从默认隔离到@concurrent 的完整指南
swift
麦兜*5 天前
Swift + Xcode 开发环境搭建终极指南
开发语言·ios·swiftui·xcode·swift·苹果vision pro·swift5.6.3
大熊猫侯佩7 天前
「内力探查术」:用 Instruments 勘破 SwiftUI 卡顿迷局
swiftui·debug·xcode
HarderCoder7 天前
Swift Concurrency:彻底告别“线程思维”,拥抱 Task 的世界
swift