SwiftUI 2.0 一篇文章讲透 @AppStorage、@StateObject和@SceneStorage
SwiftUI在WWDC 2020期间进行了一些重大的新增强。其中引人注目的是增加了SwiftUI属性包装器库。 属性包装器在SwiftUI应用程序中大量用于更新和观察视图,并且是SwiftUI数据管理的关键部分。
iOS 14为我们提供了三个用于数据持久性的新属性包装器:
- @AppStorage
- @StateObject
- @SceneStorage
在接下来的几节中,我们将在新的Xcode 12中(在撰写本文时为beta版)对其进行研究。
SwiftUI @AppStorage
AppStorage属性包装器用于读取和写入值到UserDefaults。 每次AppStorage属性包装器的值更改时,SwiftUI视图都会失效并重新绘制。
除了用于方便地在UserDefaults键和SwiftUI视图之间进行通信外,它的行为与@State属性包装器相同。 以下代码显示了我们如何在iOS 14之前使用UserDefaults和State属性包装器:
@State var name: String = "" {
get {
UserDefaults.standard.string(forKey: "name")
}
set {
UserDefaults.standard.set(newValue, forKey: "name")
}
}
新的@AppStorage属性包装器可以在一行中完成此操作:
@AppStorage("name") var name: String = "hey"
AppStorage还允许您对UserDefaults使用不同于标准的其他suiteName。
此外,我们还可以使用wraptedValue参数直接