如何用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中
- 如何将CVPixelBuffer变成UIImage?
- iOS webview在HTML内容之前留下空的空间
- 使用Flutter进行跨平台移动应用程序开发— Xamarin — React Native:以性能为中心的比较
- iOS – 在UITabBar上获取所需的阴影
- 在旧金山使用fontWithSize API
- 如何在Xcode中创build一个机器人? 获取“创build机器人需要一个受源代码控制的项目”。
- iOS UIWebView Javascript – 插入数据 – 接收callback?
- 将CKAsset保存到CloudKit中的CKRecord会产生错误:“没有收到资产的authToken”
- AFNetworking从asynchronous任务iOS返回值