Ich bin nicht sicher, ob ich das Wörterbuch oder das Datenobjekt oder beides falsch verwende. Ich versuche mich an den Wechsel zu Swift zu gewöhnen, aber ich habe ein wenig Probleme.
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
Ich brauche das NSDictionary
, um in ein NSData
Objekt zu kodieren, sowie das NSData
Objekt zu nehmen und es in ein NSDictionary
zu dekodieren.
Jede Hilfe wird sehr geschätzt, danke.
Sie können NSKeyedArchiver
und NSKeyedUnarchiver
verwenden
Beispiel für 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]
Screenshot des Spielplatzes
NSPropertyListSerialization kann eine alternative Lösung sein.
// 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>
Für Swift 3:
let data = try PropertyListSerialization.data(fromPropertyList: authResponse, format: PropertyListSerialization.PropertyListFormat.binary, options: 0)
Leos Antwort gab mir Fehler bei der Erstellung, da NSData
nicht mit Data
identisch ist. Die Funktion unarchiveObject(with:)
nimmt eine Variable vom Typ Data
an, während die Funktion unarchiveTopLevelObjectWithData()
eine Variable vom Typ NSData
annimmt.
Dies ist eine funktionierende Swift 3 Antwort:
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")
}