ios swift nsdictionary nsdata

ios - NSDictionary a NSData y NSData a NSDictionary en Swift



(5)

NSPropertyListSerialization puede ser una solución alternativa.

// Swift Dictionary To Data. var data = try NSPropertyListSerialization.dataWithPropertyList(dictionaryExample, format: NSPropertyListFormat.BinaryFormat_v1_0, options: 0) // Data to Swift Dictionary var dicFromData = (try NSPropertyListSerialization.propertyListWithData(data, options: NSPropertyListReadOptions.Immutable, format: nil)) as! Dictionary<String, AnyObject>

No estoy seguro de si estoy usando el diccionario o el objeto de datos o ambos incorrectamente. Estoy tratando de acostumbrarme al cambio rápido pero estoy teniendo un pequeño problema.

var dictionaryExample : [String:AnyObject] = ["user":"UserName", "pass":"password", "token":"0123456789", "image":0] // image should be either NSData or empty let dataExample : NSData = dictionaryExample as NSData

Necesito el NSDictionary para codificar a un objeto NSData , así como tomar ese objeto NSData y decodificarlo en un NSDictionary .

Cualquier ayuda es muy apreciada, gracias.


Para Swift 3:

let data = try PropertyListSerialization.data(fromPropertyList: authResponse, format: PropertyListSerialization.PropertyListFormat.binary, options: 0)


Para Swift 4 -

let dictionaryExample : [String:AnyObject] = ["user":"UserName" as AnyObject, "pass":"password" as AnyObject, "token":"0123456789" as AnyObject, "image":0 as AnyObject] let dataExample : NSData = NSKeyedArchiver.archivedData(withRootObject: dictionaryExample) as NSData let dictionary:NSDictionary? = NSKeyedUnarchiver.unarchiveObject(with: dataExample as Data)! as? NSDictionary


Puede usar NSKeyedArchiver y NSKeyedUnarchiver

Ejemplo para swift 2.0+

var dictionaryExample : [String:AnyObject] = ["user":"UserName", "pass":"password", "token":"0123456789", "image":0] let dataExample : NSData = NSKeyedArchiver.archivedDataWithRootObject(dictionaryExample) let dictionary:NSDictionary? = NSKeyedUnarchiver.unarchiveObjectWithData(dataExample)! as? NSDictionary

Swift3.0

let dataExample: Data = NSKeyedArchiver.archivedData(withRootObject: dictionaryExample) let dictionary: Dictionary? = NSKeyedUnarchiver.unarchiveObject(with: dataExample) as! [String : Any]

Captura de pantalla del patio


La respuesta de Leo me dio errores de tiempo de compilación porque NSData no es lo mismo que Data . La función unarchiveObject(with:) toma una variable de tipo Data , mientras que la función unarchiveTopLevelObjectWithData() toma una variable de tipo NSData .

Esta es una respuesta activa de Swift 3 :

var names : NSDictionary = ["name":["John Smith"], "age": 35] let namesData : NSData = NSKeyedArchiver.archivedData(withRootObject: names) as NSData do{ let backToNames = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(namesData) as! NSDictionary print(backToNames) }catch{ print("Unable to successfully convert NSData to NSDictionary") }