将一组颜色保存为用户默认值 - iOS Swift 2.3

Save an array of colors to User Defaults - iOS Swift 2.3

我想知道如何将一组 UIColors 保存为用户默认值。

我有以下代码将单个 UIColor 保存到用户默认值,有谁知道如何修改它以允许我在 NS 用户默认值中存储 UIColor 数组?

extension NSUserDefaults {
    
    func colorForKey(key: String) -> UIColor? {
        var color: UIColor?
        if let colorData = dataForKey(key) {
            color = NSKeyedUnarchiver.unarchiveObjectWithData(colorData) as? UIColor
        }
        return color
    }
    
    
    
    func setColor(color: UIColor?, forKey key: String) {
        var colorData: NSData?
        if let color = color {
            colorData = NSKeyedArchiver.archivedDataWithRootObject(color)
        }
        setObject(colorData, forKey: key)
    }
    
}

您可以按照以下方式进行

let colors = [UIColor.whiteColor(), UIColor.greenColor()] // Array of colors
NSUserDefaults.standardUserDefaults().setObject(NSKeyedArchiver.archivedDataWithRootObject(colors), forKey: "ColorsKey") //For saving in NSUserDefaults
//For retrieving use following 
let decodedColorsData  = NSUserDefaults.standardUserDefaults().objectForKey("ColorsKey") as! NSData
let colorsArray = (NSKeyedUnarchiver.unarchiveObjectWithData(decodedColorsData) as! NSArray) as Array

Swift 4.2:保存和加载颜色/用户默认颜色 注意:默认值的加载有效,但包含一个已弃用的项目,该项目还没有一个很好的示例来替换它。

               let colorToSetAsDefault : UIColor = view.backgroundColor!
                do
                {
                    let data : NSData = try NSKeyedArchiver.archivedData(withRootObject: colorToSetAsDefault,requiringSecureCoding: false) as NSData
                    UserDefaults.standard.set(data, forKey: "userHeadingColor") // your key in quotes
                    UserDefaults.standard.synchronize()
                } // end of do
                catch
                {
                    print("Couldn't save color")
                }  // end of catch

            // load the color back as a test to make sure the save has worked
            if let colorObject = UserDefaults.standard.object(forKey: "userHeadingColor")
            {
                let colorData = colorObject as! NSData
                let color = NSKeyedUnarchiver.unarchiveObject(with: colorData as Data) as? UIColor
                // replace with unarchivedObjectOfClass:fromData:error:
                self.testDefaultsView.backgroundColor = color
            }
            else
            {

            }