SwiftUI:如何使用 UserDefaults 保存选择器数据?

Posted

技术标签:

【中文标题】SwiftUI:如何使用 UserDefaults 保存选择器数据?【英文标题】:SwiftUI: How I can save picker data with UserDefaults? 【发布时间】:2020-09-13 18:40:17 【问题描述】:

我是 SwiftUI 的新手,想从选择器中保存用户选择。我知道我需要 UserDefaults,但我不知道在这种情况下如何使用 UserDefaults

struct ContentView: View 

    @Environment(\.colorScheme) var colorScheme
    @State var PickerSelection = 0
    
    //PickerStyle

    init() 
        UISegmentedControl.appearance().selectedSegmentTintColor = .init(UIColor(named: "Color_Picker")!)
        UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
        UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.init(named: "Color_Picker")!], for: .normal)
    
    
    var body: some View 
        VStack 
            Picker("", selection: $PickerSelection) 
            Text("Selection 1").tag(0)
            Text("Selection 2").tag(1)
             .pickerStyle(SegmentedPickerStyle()).padding(.horizontal, 100)
            Text("Hello World!")
    

【问题讨论】:

【参考方案1】:

您可以在Just 发布者的帮助下使用.onReceive(兼容ios 13*)

import Combine
struct ContentView: View 

    @Environment(\.colorScheme) var colorScheme
    @State var PickerSelection = UserDefaults.standard.integer(forKey: "Picker")

    //PickerStyle

    init() 
        UISegmentedControl.appearance().selectedSegmentTintColor = .init(UIColor(named: "Color_Picker")!)
        UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.white], for: .selected)
        UISegmentedControl.appearance().setTitleTextAttributes([.foregroundColor: UIColor.init(named: "Color_Picker")!], for: .normal)
    

    var body: some View 
        VStack 
            Picker("", selection: $PickerSelection) 
                Text("Selection 1").tag(0)
                Text("Selection 2").tag(1)
            
            .pickerStyle(SegmentedPickerStyle()).padding(.horizontal, 100)
            .onReceive(Just(PickerSelection)) 
                UserDefaults.standard.set($0, forKey: "Picker")   // << here !!
            

            Text("Hello World!")
        
    

【讨论】:

你注意到上面的import Combine了吗?

以上是关于SwiftUI:如何使用 UserDefaults 保存选择器数据?的主要内容,如果未能解决你的问题,请参考以下文章

使用 @AppStorage 进行设置的 SwiftUI 最佳实践:如何在加载 @AppStorage 之前读取 UserDefaults?

在 SwiftUI 中使用 UserDefaults 进行全局更新

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

如何在 Userdefaults (SwiftUI) 中将新元素附加到数组

当 UserDefaults 值更改 SwiftUI 时,@FetchRequest 谓词不会更新

SwiftUI 从 UserDefaults.standard 存储和提取字典