NSDictionary a NSData y NSData a NSDictionary en Swift

No estoy seguro de si estoy usando el diccionario o el objeto de datos o ambos de forma incorrecta. Estoy tratando de acostumbrarme a la cambie a swift, pero estoy teniendo un poco de dificultad.

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 NSData objeto, así como tomar que NSData objeto y decodificar en un NSDictionary.

Cualquier ayuda es muy apreciada, gracias.

  • Lo que realmente tratando de lograr? Diciendo: «convertir NSDictionary a NSData» no tiene sentido si no se especifica un formato para la NSData.
InformationsquelleAutor IanTimmis | 2014-10-15

5 Kommentare

  1. 111

    Puede utilizar 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 de la zona de juegos

    NSDictionary a NSData y NSData a NSDictionary en Swift

    • Ustedes contestaron mi pregunta precisada en el título. Creo que AnyObject estaba equivocado. Quiero tener el user/pass/token de ser cadenas y la imagen de ser un nsdata objeto. Soy capaz de hacer eso? o debo codificar todos ellos en NSData objetos y, a continuación, decodificar ellos después?
    • clase func unarchiveObjectWithData(datos: NSData) -> AnyObject? Esto es de la doc de xocde.
    • No importa cuando termino de usar que les acabo de decir de los datos.valueForKey(«usuario») as string Gracias por la ayuda este hilo ahora puede cerrar
    • Esto no funciona. Esto produce error 'AnyObject' is not convertible to 'NSDictionary';
    • He de actualizar el código. Me respondió que la respuesta cuando se swift 1.2. Así,por swift 2.0,podría tener algún problema de sintaxis
    • Esto no funciona porque la función unarchiveObject(con el:) toma una variable de tipo de Datos, mientras que la función unarchiveTopLevelObjectWithData() toma una variable de tipo NSData. Ver mi respuesta

  2. 9

    NSPropertyListSerialization puede ser una alternativa de solución.

    //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>
  3. 3

    Para Swift 3:

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

    Leo la respuesta de me dio tiempo de generación de errores, debido a NSData no es el 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.

    Este es un trabajo Swift 3 respuesta:

    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")
    }
  5. -4

    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
    • Mal ejemplo. Usted dice «Swift 4» pero estás lanzando NSData a los Datos en lugar de utilizar directamente los Datos, usted está utilizando AnyObject en lugar de Cualquiera, y el uso de accesorios está lejos de ser óptimo…

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea