Je ne suis pas sûr si j'utilise le dictionnaire ou l'objet de données ou les deux de manière incorrecte. J'essaie de m'habituer au passage à Swift mais j'ai un petit problème.
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
Il me faut le NSDictionary
pour encoder un objet NSData
et prendre cet objet NSData
et le décoder en un NSDictionary
.
Toute aide est grandement appréciée, merci.
Vous pouvez utiliser NSKeyedArchiver
et NSKeyedUnarchiver
Exemple pour 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]
Capture d'écran du terrain de jeu
NSPropertyListSerialization peut être une solution alternative.
// 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>
Pour Swift 3:
let data = try PropertyListSerialization.data(fromPropertyList: authResponse, format: PropertyListSerialization.PropertyListFormat.binary, options: 0)
La réponse de Leo m'a donné des erreurs de temps de construction parce que NSData
n'est pas la même chose que Data
. La fonction unarchiveObject(with:)
prend une variable de type Data
, alors que la fonction unarchiveTopLevelObjectWithData()
prend une variable de type NSData
.
Ceci est une réponse active 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")
}