swift xcode swift3 nskeyedunarchiver

NSKeyedUnarchiver no funciona con Swift 3



xcode swift3 (1)

Tengo el siguiente código que uso para desarchivar un archivo en mi aplicación Mac:

func tryOpen(_ filePath: String) throws -> NSArray { if #available(OSX 10.11, *) { do { if let data = try? Data(contentsOf: URL(fileURLWithPath: filePath)) { let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as! NSArray return array } else { throw NSError(domain: NSExceptionName.invalidUnarchiveOperationException.rawValue, code: 0, userInfo: nil) } } catch let ex { throw ex } } else { // Fallback on earlier versions let dat = try? Data(contentsOf: URL(fileURLWithPath: filePath)) let unarchiver = NSKeyedUnarchiver(forReadingWith: dat!) if let array = unarchiver.decodeObject(forKey: "root") as? NSArray { return array } else { throw NSException(name: NSExceptionName.invalidArgumentException, reason: "Unable to unarchive file", userInfo: nil) as! Error } } }

Sin embargo, desde que me actualicé a Swift 3 en Xcode 8.0, tengo el siguiente mensaje de error: ''unarchiveTopLevelObjectWithData'' is unavailable in Swift: Use ''unarchiveTopLevelObjectWithData(_:) throws'' instead , que es más o menos lo mismo, ¿no? Así que estoy muy confundido sobre cómo solucionar esto. ¿Es esto un error en Xcode?


El NSKeyedUnarchiver aún espera un NSData :

let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data as NSData) as! NSArray

Esto se ha remediado en Swift 4