swift - 使用泛型取消存档 Swift 中的自定义对象

标签 swift generics nskeyedunarchiver

我正在尝试编写代码以将 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

但这显然违背了泛型的目的。

任何帮助等,非常感谢

最佳答案

试试这个

class func itemForKey<T>(key: String) -> T?
{
    if let dataObj = NSUserDefaults.standardUserDefaults().objectForKey(key) as? NSData {
        return NSKeyedUnarchiver.unarchiveObjectWithData(dataObj) as? T
    }

    return nil
}

关于swift - 使用泛型取消存档 Swift 中的自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31159899/

相关文章:

c# - 无法转换类型 System.Collection.Generic.List<T>

ios - swift:nscoding decodeObject 始终为 nil

swift - 通知中心观察者检查 NSTextView 是否正常工作

ios - 如何显示结果小数样式而不是指数?

ios - 异步函数不更新变量

xcode - NSKeyedUnarchiver unarchivedObjectOfClass : fromData:error; 问题

ios - 不推荐使用 initForReadingWithData - initForReadingFromData 返回 nil

ios - 快速创建两个只有底部边框的文本字段

java - java.util.Arrays.copyOf(U[], int, Class<? extends T[]>) 中通用通配符的优点

java - 有没有办法在调用泛型/参数化方法时强制提供类型参数?