如何存储多个颜色值并将其保存到UserDefaults-iOS

如何存储多个颜色值并将其保存到UserDefaults-iOS,ios,swift,nsmutablearray,nsuserdefaults,nsattributedstring,Ios,Swift,Nsmutablearray,Nsuserdefaults,Nsattributedstring,我正在创建一个富文本编辑器,其中包含一个文本视图,该文本具有两个属性,即颜色和字体样式。这些属性被指定给用户想要的任何选定文本范围,并且文本可以具有用户需要的任意多个颜色和字体属性。便笺应保存到磁盘。当同时启动一个颜色、字体和范围属性时,我已经设法将一个加载保存到磁盘,现在我正在尝试根据需要保存尽可能多的颜色属性,我不知道如何做到这一点,所以我想到应该将它们存储在一个数组中,并将该数组保存到磁盘。我有以下代码: func didSelectColorCell(color: UIColor) {

我正在创建一个富文本编辑器,其中包含一个文本视图,该文本具有两个属性,即颜色和字体样式。这些属性被指定给用户想要的任何选定文本范围,并且文本可以具有用户需要的任意多个颜色和字体属性。便笺应保存到磁盘。当同时启动一个颜色、字体和范围属性时,我已经设法将一个加载保存到磁盘,现在我正在尝试根据需要保存尽可能多的颜色属性,我不知道如何做到这一点,所以我想到应该将它们存储在一个数组中,并将该数组保存到磁盘。我有以下代码:

func didSelectColorCell(color: UIColor) {
    noteTextView.setAttributedValueAtSelectedTextRange(NSForegroundColorAttributeName, value: color)
    let colors = [color].append(color)
    UserDefaults.standard.store(colors, forKey: "selectedColor")
    let data = NSKeyedArchiver.archivedData(withRootObject: noteTextView.selectedRange)
    UserDefaults.standard.set(data, forKey: "selectedTextRange")
}
上面的函数是一个方法,它符合我创建的委托的协议,该委托用于从另一个视图控制器传递颜色值

这是
storecolors:
功能:

func store(_ colors: [UIColor], forKey key: String) {
    set(NSKeyedArchiver.archivedData(withRootObject: colors), forKey: key)
}
编译器显示一个错误:

无法对[UIColor]类型的不可变值使用变异成员


如何使数组成为可变值?我是否应该以另一种方式处理此问题(不将颜色存储在数组中)?提前感谢:)

在检索convert to
UIColor
时使用RGB值进行存储。尝试使用encode和Decoder仅关注函数参数的可变性问题。它们作为不可变对象传入。您可以复制一个
var colorsCopy=colors
,或者用inout标记参数,表明您希望它是可变的
func存储(ucolors:inout[UIColor]
。您可能会问一个类似的问题:我已经发布了一个示例来指导如何保存对象(包括列表,如果您可以自己尝试的话)阅读答案并评论你的想法。