Swift 从UserDefault保存/获取UIColor
我需要一些帮助来从UserDefault加载和读取UIColor 我找到了一个很好的扩展:Swift 从UserDefault保存/获取UIColor,swift,string,uicolor,userdefaults,nskeyedunarchiver,Swift,String,Uicolor,Userdefaults,Nskeyedunarchiver,我需要一些帮助来从UserDefault加载和读取UIColor 我找到了一个很好的扩展: extension UserDefaults { func colorForKey(key: String) -> UIColor? { var color: UIColor? if let colorData = data(forKey: key) { color = NSKeyedUnarchiver.unarchiveObject(with: colorData) as? UI
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)
}
}
}
扩展用户默认值{
func colorForKey(键:字符串)->UIColor{
如果让colorData=数据(forKey:key),
让color=try?NSKeyedUnarchiver.unarchivedObject(类:UIColor.self,from:colorData)
{
返回颜色
}否则{
归零
}
}
//但为什么会有这样的选择呢?
func setColor(颜色:UIColor?,分叉键:字符串){
如果让颜色=颜色,
让colorData=try?NSKeyedArchiver.archivedData(withRootObject:color,RequiringSecureCodeding:true)
{
设置(colorData,forKey:key)
}
}
}
在代码中,只需替换两行即可,即
替换
color=NSKeyedUnarchiver.unarchiveObject(带:colorData)作为?UIColor
与
color=试试看!NSKeyedUnarchiver.unarchivedObject(类:UIColor.self,from:colorData)
////在这里,您可以使用try?
而不是try
并将其包装在if let
语句中。你的选择
和
替换
colorData=NSKeyedArchiver.archivedData(withRootObject:color)作为NSData?
与
colorData=try?NSKeyedArchiver.archivedData(带rootobject:color,requireringsecurecoding:true)
此外,在var colorData:NSData?
中使用Data
代替NSData
,即
var colorData: Data?
你的意思是“为什么在这里是可选的?”就像为什么函数setColor(color:forKey)
为color
取一个Optional
参数一样?