2016-02-06 22 views
6

Il codice funziona, ma come faccio a disattivare questo avviso che continua ad apparire ogni volta?da [String: AnyObject] a un tipo non correlato NSMutableDictionary ha sempre esito negativo Avviso

let parentView = self.parentViewController as! SBProfileViewController 
parentView.savedDetailsModel = SBSavedUserModel(data:responseObject["data"].dictionaryObject! as! NSMutableDictionary) 

cast '[String: ANYOBJECT]' al tipo di estranei 'NSMutableDictionary' fallisce sempre Attenzione

negozi SavedUserModel salvate informazioni: -

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 
} 
+0

Perché vuoi che il tuo dizionario sia modificabile? – Tommy

+0

Poiché i contenuti del dizionario possono cambiare in fase di esecuzione. Come utente può modificare/modificare i dettagli qualsiasi numero di volte. @ Tommy – Jitendra

+0

Il codice che ci hai fornito cerca quattro elementi dal dizionario e poi non lo usa mai più. – Tommy

risposta

4

provare a sostituire

responseObject["data"].dictionaryObject! as! NSMutableDictionary

con questo:

NSMutableDictionary(dictionary: responseObject["data"].dictionaryObject!)

si potrebbe facilmente gettato in una NSDictionary, ma per qualche ragione quando si desidera un NSMutableDictionary, si deve inizializzare una nuova con NSMutableDictionary(dictionary:)

Modifica : vedi il commento su questa domanda di @Tommy per il motivo per cui è necessario.

+0

Ottimo Ha funzionato !! :) @addison – Jitendra

+0

Fantastico! Ricorda di selezionare questa come risposta accettata :) – Addison

+1

Il "per qualche motivo" è che stai iniziando con un dizionario immutabile. Non è strano che il linguaggio non ti permetta di provare a mutarlo. "Questo oggetto è immutabile" non significa "questo oggetto richiede una sintassi leggermente più arcana da mutare". – Tommy

2

differenza NSArray e NSDictionary le mutevoli Foundation tipi di raccolta NSMutableArray e NSMutableDictionary non sono collegati a ponte alle controparti Swift.

La soluzione più semplice è quella di continuare a utilizzare Swift tipi nativi

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 
    } 
} 

O - ancora più conveniente se tutti valori nel dizionario sono stringhe

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"]! 
} 
+0

La soluzione è corretta tuttavia per alcuni motivi sto utilizzando NSMutableDictionary per oggetti mutabili. I tipi nativi Swift sono sempre la scelta migliore se programmiamo solo in swift. – Jitendra

-1

speranza in questo modo può aiuto: mutableDictionary as NSDictionary as? [String: AnyObject] stesso modo funziona su NSMutableArray.

Problemi correlati