NSKeyedUnarchiver.unarchiveTopLevelObjectWithData 在 Swift 4 中已过时

Posted

技术标签:

【中文标题】NSKeyedUnarchiver.unarchiveTopLevelObjectWithData 在 Swift 4 中已过时【英文标题】:NSKeyedUnarchiver.unarchiveTopLevelObjectWithData is obsoleted in Swift 4 【发布时间】:2018-09-06 16:19:42 【问题描述】:

我尝试在 Swift 4 中实现一个 AwesomeCache 的分支,它实现了 unarchiveTopLevelObjectWithData

if let data = NSData(contentsOfFile: path) 
    do 
        possibleObject = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data as NSData) as? CacheObject
    
    catch 

但是 Xcode 现在生我的气,说:

'unarchiveTopLevelObjectWithData' was obsoleted in Swift 4 (Foundation.NSKeyedUnarchiver)

意思是,imo,因为它没有告诉我它被替换为什么(如果有的话?),而且documentation 相当......空置。

那我用什么代替呢?

【问题讨论】:

【参考方案1】:

同意你的观点,NSData 不是 Data,改进可能是:

    if let nsData = NSData(contentsOfFile: path) 
        do 
            let data = Data(referencing:nsData)
            possibleObject = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? CacheObject
        
        catch 
    

【讨论】:

【参考方案2】:

哦,我真傻。

NSData 不是Data

if let data = NSData(contentsOfFile: path) 
    do 
        possibleObject = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data as Data) as? CacheObject
                                                                                //       ^
    
    catch 

...让 Xcode 开心。

【讨论】:

以上是关于NSKeyedUnarchiver.unarchiveTopLevelObjectWithData 在 Swift 4 中已过时的主要内容,如果未能解决你的问题,请参考以下文章