如何在SwiftUI中将Stepper数据保存为UserDefaults


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)
}
}

最新更新