我试图编写代码来将NSData解压缩到NSUserDefaults的自定义对象中,到目前为止,我已经得到了这个 -
class func itemForKey<T>(key: String) -> T?
{
let userDefaults = NSUserDefaults.standardUserDefaults()
var value : T?
if let dataObj = NSUserDefaults.standardUserDefaults().objectForKey(key) as? NSData
{
value = NSKeyedUnarchiver.unarchiveObjectWithData(dataObj) as? T
}
return value
}
不幸的是,它会返回垃圾。如果我在取消归档时为类类型切换T,则正确创建对象 -
class func itemForKey<T>(key: String) -> T?
{
let userDefaults = NSUserDefaults.standardUserDefaults()
var value : T?
if let dataObj = NSUserDefaults.standardUserDefaults().objectForKey(key) as? NSData
{
let obj = NSKeyedUnarchiver.unarchiveObjectWithData(dataObj) as? CustomObject // correct at this point
但显然这违背了仿制药的目的。
任何帮助等,非常感谢
答案 0 :(得分:1)
试试这个
class func itemForKey<T>(key: String) -> T?
{
if let dataObj = NSUserDefaults.standardUserDefaults().objectForKey(key) as? NSData {
return NSKeyedUnarchiver.unarchiveObjectWithData(dataObj) as? T
}
return nil
}
答案 1 :(得分:0)
你不必在方法中推断出类,也可以这样调用方法的那个,
let item: MyClass? = SomeObject.itemForKey("SomeKey")
注意:该项目使用MyClass类型声明,因此编译器将正确推断出方法中的T,
答案 2 :(得分:0)
我修好了,但我真的不明白老版本为什么不起作用。新代码是 -
class func itemForKey<T>(key: String) -> T?
{
let userDefaults = NSUserDefaults.standardUserDefaults()
var value : T?
if let dataObj = NSUserDefaults.standardUserDefaults().objectForKey(key) as? NSData
{
if let obj: AnyObject = NSKeyedUnarchiver.unarchiveObjectWithData(dataObj)
{
value = obj as? T
}
}
return value
}
如果有人知道为什么会这样做&amp;第一个版本没有,我很高兴听到