我正在尝试对我的代码进行编程,以便在用户按下夜间按钮时,如果用户关闭应用程序,背景将变为黑色并保持黑色。 (白天模式也一样。)
请注意:我已经编码了按钮,当他们按下按钮时,所有场景都会变为该模式。
这是我的代码,我将需要保存背景颜色:(我在两个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
}
答案 0 :(得分:13)
Swift 4.2或更高版本
请注意,这只会将RGBA CGFloat值保存为属性列表中的Data。当使用NSKeyedUnarchiver(NSCoding)的标准方法时,这将使用32个字节(原始数据)而不是424个字节:
extension UserDefaults {
func set(_ color: UIColor?, forKey defaultName: String) {
var red: CGFloat = 0, green: CGFloat = 0, blue: CGFloat = 0, alpha: CGFloat = 0
guard let color = color, color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
else {
removeObject(forKey: defaultName)
return
}
let count = MemoryLayout<CGFloat>.size
set(Data(bytes: &red, count: count) +
Data(bytes: &green, count: count) +
Data(bytes: &blue, count: count) +
Data(bytes: &alpha, count: count), forKey: defaultName)
}
func color(forKey defaultName: String) -> UIColor? {
guard let data = data(forKey: defaultName) else {
return nil
}
let size = MemoryLayout<CGFloat>.size
return UIColor(red: data[size*0..<size*1].withUnsafeBytes{ $0.pointee },
green: data[size*1..<size*2].withUnsafeBytes{ $0.pointee },
blue: data[size*2..<size*3].withUnsafeBytes{ $0.pointee },
alpha: data[size*3..<size*4].withUnsafeBytes{ $0.pointee })
}
}
extension UserDefaults {
var backgroundColor: UIColor? {
get {
return color(forKey: "backgroundColor")
}
set {
set(newValue, forKey: "backgroundColor")
}
}
}
UserDefaults.standard.backgroundColor = .red
UserDefaults.standard.backgroundColor // r 1.0 g 0.0 b 0.0 a 1.0
答案 1 :(得分:-1)
最简单的方法是使用NSUserDefaults
。
简单示例 -
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("Coding Explorer", forKey: "userNameKey")
在这种情况下,您存储字符串"Coding Explorer"
,您可以通过键"userNameKey"
进行引用。我相信你可以看到如何在解决方案中使用它:P
帮助您入门的好资源here
如果你想要一些更强大的东西,看看CoreData,实现有点复杂。 CoreData可能不是简单状态持久性所需要的,但可能值得研究。
链接here
修改强>
Here is a great example to look at how you can save the actual color to NSUserData