Мне назначен массив цветов, который я хочу сохранить в 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)
}
}