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

Posted

技术标签:

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

【问题讨论】:

使用AppStorage。这是一个例子***.com/a/62810288/12299030。 【参考方案1】:

简要说明:Asperi的回答@ ***.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)
    

【讨论】:

以上是关于如何在 SwiftUI 中将 Stepper 数据保存到 UserDefaults?的主要内容,如果未能解决你的问题,请参考以下文章

14:SwiftUI-Stepper

在 SwiftUI 中更新 CoreData 时更新状态变量

如何在 SwiftUI 中将数据从视图传递到另一个视图?

如何在 SwiftUI 中将 Firebase 结果转换为 List

SwiftUI - 如何在 TextField 上设置最大数量?

如何从基于 SwiftUI 文档的应用程序中将多个文件保存在包文件夹中?