Le code fonctionne, mais comment puis-je faire taire cet avertissement qui continue d'apparaître à chaque fois?
let parentView = self.parentViewController as! SBProfileViewController
parentView.savedDetailsModel = SBSavedUserModel(data:responseObject["data"].dictionaryObject! as! NSMutableDictionary)
le transtypage de '[String: AnyObject]' vers un type non lié 'NSMutableDictionary' échoue toujours Avertissement
SavedUserModel stocke les informations enregistrées: -
class SBSavedUserModel : NSObject {
var userId : String!
var firstName : String!
var lastName : String!
var imageBase64 : String!
required init ( data : NSMutableDictionary) {
self.userId = data.objectForKey("userId") as! String
self.firstName = data.objectForKey("fName") as! String
self.lastName = data.objectForKey("lName") as! String
self.imageBase64 = data.objectForKey("image") as! String
}
Essayez de remplacer
responseObject["data"].dictionaryObject! as! NSMutableDictionary
avec ça:
NSMutableDictionary(dictionary: responseObject["data"].dictionaryObject!)
Vous pouvez facilement le transformer en un NSDictionary, mais pour une raison quelconque, si vous souhaitez un NSMutableDictionary, vous devez en initialiser un nouveau avec NSMutableDictionary(dictionary:)
.
Edit : voir le commentaire de cette question par @Tommy sur la raison pour laquelle cela est nécessaire.
Contrairement à NSArray
et NSDictionary
, les types de collection mutables Foundation
NSMutableArray
et NSMutableDictionary
ne sont pas pontés vers leurs équivalents Swift.
La solution la plus simple est de continuer à utiliser les types natifs Swift
let parentView = self.parentViewController as! SBProfileViewController
parentView.savedDetailsModel = SBSavedUserModel(data:responseObject["data"].dictionaryObject!)
...
class SBSavedUserModel : NSObject {
var userId, firstName, lastName, imageBase64 : String
required init ( data : [String:AnyObject]) {
self.userId = data["userId"] as! String
self.firstName = data["fName"] as! String
self.lastName = data["lName"] as! String
self.imageBase64 = data["image"] as! String
}
}
Ou - encore plus pratique si toutes les valeurs du dictionnaire sont des chaînes
parentView.savedDetailsModel = SBSavedUserModel(data:responseObject["data"].dictionaryObject as! [String:String])
...
required init ( data : [String:String]) {
self.userId = data["userId"]!
self.firstName = data["fName"]!
self.lastName = data["lName"]!
self.imageBase64 = data["image"]!
}