【发布时间】:2018-03-15 05:25:16
【问题描述】:
我有多个要保存到 UserDefaults 的对象类型。所以,我编写了一个 UserDefaultsManager 类,其中我有使用 NSKeyedArchiver 将对象保存在 UserDefaults 中并使用 NSKeyedUnarchiver 获取的方法。方法如下:
class UserDefaultsManager
{
class func saveToUserDefaults(object:Any, Key:String)
{
let data = NSKeyedArchiver.archivedData(withRootObject: object)
UserDefaults.standard.setValue(data, forKey: key)
UserDefaults.standard.synchronize()
}
class func userDefaultsForKey(_ key:String) -> Any
{
let data = UserDefaults.standard.value(forKey: key)
let object = NSKeyedUnarchiver.unarchiveObject(with: data as! Data)
return object as! LoginUser
}
}
如您所见,要保存的对象可以是任何类型,因此我将参数定义为“任何”。现在,当我需要获取对象时,我将其转换为“LoginUser”对象类型,然后将其返回。
我还可以添加另一个名为“类型”的参数,并在此基础上将其向下转换为该特定类型。但这不是重点。
这里的重点是我正在考虑创建一个协议,例如“UserDefaultsPersistence”,并且只有确认该协议的类才能调用此类方法并保存在 UserDefaults 中。这是一个示例:
class func archiveObject<T:UserDefaultPersistence>(object:T) -> Data
{
let data = NSKeyedArchiver.archivedData(withRootObject: object)
return data
}
但问题是,当我从 UserDefaults 获取对象时,我必须将其向下转换为特定对象才能使用其属性。那么使用协议的全部意义何在?
【问题讨论】:
标签: swift3 protocols userdefaults