从 UserDefaults 保存/获取 UIColor
Posted
技术标签:
【中文标题】从 UserDefaults 保存/获取 UIColor【英文标题】:Save/Get UIColor from UserDefaults 【发布时间】:2019-03-30 16:42:48 【问题描述】:我需要一些帮助来从 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 最近被弃用了,所以我不知道如何从中获取数据。
有什么建议吗? 谢谢!
【问题讨论】:
【参考方案1】:在您的代码中,只需替换 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?
【讨论】:
【参考方案2】:只需按照弃用消息告诉您的操作:
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)
【讨论】:
你的意思是“为什么这里是 OptionalsetColor(color:forKey)
为Color
采用Optional
参数?以上是关于从 UserDefaults 保存/获取 UIColor的主要内容,如果未能解决你的问题,请参考以下文章
UserDefaults with Struct - TableView 不显示从 UserDefaults 保存的数据?
从 UserDefaults 获得的布尔值打印为 0 或 1,即使保存为 Any