struct Test {
@State private var steps = UserDefaults.standard.integer(forKey: "steps") {
didSet {
steps = UserDefaults.standard.integer(forKey: "steps")
}
}
var body: some View {
Stepper("Go up or down: (steps)", value: $steps)
.onChange(of: steps) { newValue in
UserDefaults.standard.set(newValue, forKey: "steps")
}
}
}
将didSet
与绑定值一起使用不会调用didSet方法。既然值在变化,难道不应该调用它吗?因此,在导航视图中来回推送此视图后,我无法保存和显示保存的值。我应该如何解决这个问题?
简单解释:Asperi的答案@stackoverflow.com/a/6281028/12299030(
使用@AppStorage
而不是UserDefaults
,当值更改时,它将自动重新调用视图的主体属性。也就是说,这个包装器有效地监视UserDefaults中的一个键,并在该键更改时刷新您的UI。非常适合Binding
值。
struct Test {
@AppStorage("steps") var steps = 0
var body: some View {
Stepper("Go up or down: (steps)", value: $steps)
}
}