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參數直接