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) 中将新元素附加到数组