如何使用NSUserDefaults保存UIColor? [英] How do I save a UIColor with NSUserDefaults?

查看:484
本文介绍了如何使用NSUserDefaults保存UIColor?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试对我的代码进行编程,以便在用户按下夜间按钮时,如果用户关闭应用程序,背景将变为黑色并保持黑色。 (同样适用于白天模式。)

I'm trying to program my code so that if the user presses the Night Button the background will turn black and stay black if the user closes the app. (Same goes for day mode.)

请注意:我已经编码了按钮,当他们按下按钮时,所有场景都会变为该模式。

Please note: I already coded buttons and when they press it, all of the scenes change to that mode.

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

Here's my code where I'm going going to need the background color to be saved: (I need it in both if statements)

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创建一个UIColor来自动保存,如下所示:

You can also create a UIColor with a getter setter to save it automatically as follow:

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保存UIColor?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆