【问题标题】:How to save a Stepper data to UserDefaults in SwiftUI?如何在 SwiftUI 中将 Stepper 数据保存到 UserDefaults?
【发布时间】:2022-01-18 18:38:35
【问题描述】:
    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 方法。由于价值正在改变,不应该调用它吗?因此,在从导航视图来回推送此视图后,我无法保存和显示保存的值。我应该如何解决这个问题?

【问题讨论】:

标签: swiftui binding userdefaults stepper didset


【解决方案1】:

简要说明:Asperi的回答@ stackoverflow.com/a/62810288/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)
    }
}

【讨论】:

    猜你喜欢
    • 2020-11-08
    • 2020-04-03
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    相关资源
    最近更新 更多