SwiftUI 常用 Property Wrappers 之 AppStorage
🧠🔋
有些时候我们需要存储一些数据在应用本地,比如一个新用户是否展示新手引导,当用户点击之后下次就不在展示,这个信息我们存在应用本地,当用户删除应用之后这个值也会被相应的删除。本地存储的这些信息是存放在UserDefaults 里,在 SwiftUI 里有个单独的 Property Wrapper 就是 AppStorage。
init(_ key: String, store: UserDefaults? = nil) where Value == Bool?
init(_ key: String, store: UserDefaults? = nil) where Value == Int?
init(_ key: String, store: UserDefaults? = nil) where Value == Double?
init(_ key: String, store: UserDefaults? = nil) where Value == String?
init(_ key: String, store: UserDefaults? = nil) where Value == URL?
init(_ key: String, store: UserDefaults? = nil) where Value == Data?
上面的初始化里就是可以存放的值的类型。
struct AppStorageView: View {
@AppStorage("number") var number: Int = 0
var body: some View {
Button("Number: \(number)") {
number += 1
}
}
}
可以看到上面我们定义 AppStorage 的时候,括号里的参数"number"就是存储的 UserDefauts 的key。
更新View
同样 AppStorage 值在变化的时候,也会更新到相应的使用到的页面。而且number其实是存在plist文件里,放在了磁盘中,下次启动后,让后会读取上次存储的内容。
struct AppStorageView: View {
@AppStorage("number") var number: Int = 0
@State var show = false
var body: some View {
Button("Number: \(number)") {
show.toggle()
}.sheet(isPresented: $show) {
AppStorageSecondView()
}
}
}
struct AppStorageSecondView: View {
@AppStorage("number") var number: Int = 0
var body: some View {
Button("Number: \(number)") {
number += 1
}
}
}