NSKeyedUnarchiver.unarchiveTopLevelObjectWithData 在 Swift 4 中已过时

NSKeyedUnarchiver.unarchiveTopLevelObjectWithData is obsoleted in Swift 4

我尝试在 Swift 4 中实现 unarchiveTopLevelObjectWithData 的 AwesomeCache 分支:

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 相当......空缺。

那我用什么呢?

哦,我真傻。

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 {}
    }