Save/Get 来自 UserDefaults 的 UIColor
Save/Get UIColor from UserDefaults
我需要一些帮助来从 UserDefaults 加载和读取 UIColor。
我找到了一个很好的扩展来做到这一点:
extension UserDefaults {
func colorForKey(key: String) -> UIColor? {
var color: UIColor?
if let colorData = data(forKey: key) {
color = NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor
}
return color
}
func setColor(color: UIColor?, forKey key: String) {
var colorData: NSData?
if let color = color {
colorData = NSKeyedArchiver.archivedData(withRootObject: color) as NSData?
}
set(colorData, forKey: key)
}
}
但是 NSKeyedUnarchiver.unarchiveObject 最近被弃用了,所以我不知道如何从中获取数据。
有什么建议吗?
谢谢!
按照弃用消息告诉您的那样做:
extension UserDefaults {
func colorForKey(key: String) -> UIColor? {
if let colorData = data(forKey: key),
let color = try? NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: colorData)
{
return color
} else {
return nil
}
}
// But why an Option<UIColor> here?
func setColor(color: UIColor?, forKey key: String) {
if let color = color,
let colorData = try? NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: true)
{
set(colorData, forKey: key)
}
}
}
在您的代码中,只需替换 2 行,即
替换
color = NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor
和
color = try! NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: colorData)
//// 在这里你可以使用try?
代替try!
并将其包装在if-let
语句中。您的选择。
和
替换
colorData = NSKeyedArchiver.archivedData(withRootObject: color) as NSData?
和
colorData = try? NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: true)
此外,在 var colorData: NSData?
中使用 Data
而不是 NSData
,即
var colorData: Data?
我需要一些帮助来从 UserDefaults 加载和读取 UIColor。
我找到了一个很好的扩展来做到这一点:
extension UserDefaults {
func colorForKey(key: String) -> UIColor? {
var color: UIColor?
if let colorData = data(forKey: key) {
color = NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor
}
return color
}
func setColor(color: UIColor?, forKey key: String) {
var colorData: NSData?
if let color = color {
colorData = NSKeyedArchiver.archivedData(withRootObject: color) as NSData?
}
set(colorData, forKey: key)
}
}
但是 NSKeyedUnarchiver.unarchiveObject 最近被弃用了,所以我不知道如何从中获取数据。
有什么建议吗? 谢谢!
按照弃用消息告诉您的那样做:
extension UserDefaults {
func colorForKey(key: String) -> UIColor? {
if let colorData = data(forKey: key),
let color = try? NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: colorData)
{
return color
} else {
return nil
}
}
// But why an Option<UIColor> here?
func setColor(color: UIColor?, forKey key: String) {
if let color = color,
let colorData = try? NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: true)
{
set(colorData, forKey: key)
}
}
}
在您的代码中,只需替换 2 行,即
替换
color = NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UIColor
和
color = try! NSKeyedUnarchiver.unarchivedObject(ofClass: UIColor.self, from: colorData)
//// 在这里你可以使用try?
代替try!
并将其包装在if-let
语句中。您的选择。
和
替换
colorData = NSKeyedArchiver.archivedData(withRootObject: color) as NSData?
和
colorData = try? NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: true)
此外,在 var colorData: NSData?
中使用 Data
而不是 NSData
,即
var colorData: Data?