如何将“颜色选择器”值保存到SwiftUI中的UserDefaults中?

时间:2020-08-06 21:47:15

标签: swift xcode swiftui userdefaults observableobject

我有一组要保存到UserDefaults的颜色分配。我有默认的灰色,绿色,橙色和红色,但是我想允许颜色选择器更改绿色的橙色和红色。默认值可以工作并在模拟器中显示,但是当我尝试更改数组中的颜色时,出现错误“尝试插入非属性列表对象(\ n“ 50%灰色”,\ n绿色,\ n“ “ kCGColorSpaceModelRGB 0.647194 0.881984 0.980039 1”,\ n红色\ n)用于键SavedColors。我相信这是因为颜色选择器正在尝试插入其他类型的颜色?似乎正在尝试插入CGColor或CGColorSpace?

这是我的项目代码:

import SwiftUI
import Foundation
import Combine

class UserSettings: ObservableObject {
    @Published var colors: [Color] {
        didSet {
            UserDefaults.standard.set(colors, forKey: "SavedColors")
        }
    }
    init() {
        self.colors = UserDefaults.standard.object(forKey: "SavedColors") as? [Color] ?? [Color.gray.opacity(0.5), Color.green, Color.orange, Color.red]
    }
}

struct CustomizeView: View {
    @ObservedObject var savedColors = UserSettings()
    var body: some View {
        NavigationView {
            Form {
                if #available(iOS 14.0, *) {
                    ColorPicker("Select low priority color", selection: $savedColors.colors[1])
                } else {
                    Text("Select low priority color")
                }
                if #available(iOS 14.0, *) {
                    ColorPicker("Select normal priority color", selection: $savedColors.colors[2])
                } else {
                    Text("Select normal priority color")
                }
                if #available(iOS 14.0, *) {
                    ColorPicker("Select high priority color", selection: $savedColors.colors[3])
                } else {
                    Text("Select high priority color")
                }
            }.navigationBarTitle("Customize", displayMode: .inline)
      }
}

0 个答案:

没有答案