如何用NSUserDefaults保存UIColor?

我试图编写我的代码,以便如果用户按下夜间button,背景将变成黑色,并保持黑色,如果用户closures应用程序。 (同样适用于白天模式。)

请注意:我已经编码了button,当它们按下时,所有的场景都变成了这个模式。

这是我的代码,我要去需要保存的背景颜色:(我需要它在两个if语句)

if GlobalData.dayBool == true && GlobalData.night == false { backgroundColor = GlobalData.dayColor } if GlobalData.nightBool == true && GlobalData.dayBool == false { backgroundColor = GlobalData.nightColor } 

我的日夜颜色:

 struct GlobalData { static var score = 0 static var dayColor = UIColor(red:0.93, green:0.93, blue:0.93, alpha:1.0) static var nightColor = UIColor(red:0.10, green:0.10, blue:0.10, alpha:1.0) static var dayBool = true static var nightBool = true } 

 extension NSUserDefaults { func setColor(value: UIColor?, forKey: String) { guard let value = value else { setObject(nil, forKey: forKey) return } setObject(NSKeyedArchiver.archivedDataWithRootObject(value), forKey: forKey) } func colorForKey(key:String) -> UIColor? { guard let data = dataForKey(key), color = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? UIColor else { return nil } return color } } 

您也可以使用getter setter创build一个UIColor,如下所示自动保存:

 var nightColor: UIColor? { get { return NSUserDefaults.standardUserDefaults().colorForKey("nightColor") } set { NSUserDefaults.standardUserDefaults().setColor(newValue, forKey: "nightColor") } } 

编辑/更新:

Xcode 8.1•Swift 3.0.1

 extension UserDefaults { func set(_ color: UIColor, forKey key: String) { set(NSKeyedArchiver.archivedData(withRootObject: color), forKey: key) } func color(forKey key: String) -> UIColor? { guard let data = data(forKey: key) else { return nil } return NSKeyedUnarchiver.unarchiveObject(with: data) as? UIColor } } 

 var nightColor: UIColor? { get { return UserDefaults.standard.color(forKey: "nightColor") } set { UserDefaults.standard.set(newValue, forKey: "nightColor") } } 

最简单的方法是使用NSUserDefaults

简单的例子 –

 let defaults = NSUserDefaults.standardUserDefaults() defaults.setObject("Coding Explorer", forKey: "userNameKey") 

在这种情况下,您正在存储string"Coding Explorer" ,您可以通过键"userNameKey"进行引用。 我相信你可以看到你如何将这个解决scheme应用到你的解决scheme中:P

一个很好的来源可以帮助你在这里开始

如果你想要一些更健壮的东西,看看CoreData,但实现是一个更复杂一点。 CoreData可能不是你所需要的简单状态持久性,但可能值得研究。

链接在这里

编辑

这里有一个很好的例子来看看如何将实际颜色保存到NSUserData中