Ios NSKeyedUnachiver.unarchiveTopLevelObjectWithData在Swift 4中被淘汰

Ios NSKeyedUnachiver.unarchiveTopLevelObjectWithData在Swift 4中被淘汰,ios,swift,xcode,nskeyedunarchiver,Ios,Swift,Xcode,Nskeyedunarchiver,我尝试实现AwesomeCache的分支,该分支在Swift 4中实现了unarchiveTopLevelObjectWithData: if let data = NSData(contentsOfFile: path) { do { possibleObject = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data as NSData) as? CacheObject } catch

我尝试实现AwesomeCache的分支,该分支在Swift 4中实现了
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)
我的意思是,因为它没有告诉我它被什么替换了(如果有什么的话?),而且它相当。。。空置的

那我用什么来代替呢?

哦,我真傻

NSData
不是
Data

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

…使Xcode感到高兴。

同意您的看法,
NSData
不是
Data
,改进可能是:

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