2016-02-06 20 views
6

Kod çalışıyor, ancak her seferinde görünmeye devam eden bu uyarıyı nasıl susturacağım? dan, [String: AnyObject] öğesinin ilgisiz türden NSMutableDictionary öğesine dökümü her zaman başarısız oluyor Uyarı

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

dökme '[dize: AnyObject]' daima

SavedUserModel bilgiler depolar kurtardı Uyarı başarısız ilgisiz türü 'NSMutableDictionary' için: -

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

Sözlükünüzün neden değişebilir olmasını istiyorsunuz? – Tommy

+0

Çünkü sözlüğün içeriği çalışma zamanında değişebilir. Kullanıcı istediği sayıda değiştirebilir/düzenleyebilir. @Tommy – Jitendra

+0

Bize verdiğiniz kod, sözlükten dört öğe arar ve daha sonra bir daha kullanmaz. – Tommy

cevap

4

değiştirmeyi deneyin

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

01 Bununla

:

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

Kolayca bir NSDictionary üzerine atacak olabilir, ancak bir NSMutableDictionary isteyen bazı nedenlerden dolayı, NSMutableDictionary(dictionary:)

Edit ile yeni bir tane başlatmak zorunda : Bu sorunun neden gerekli olduğunu görmek için @Tommy'ye bakın.

+0

Harika Bu işe yaradı! :) @addison – Jitendra

+0

Harika! Kabul edilen yanıt olarak bunu seçmeyi unutmayın :) – Addison

+1

"Bazı nedenlerden dolayı" değişmez bir sözlükle başlıyor olmanızdır. Dilin bunu değiştirmeyi denemenize izin vermesi garip değildir. "Bu nesne değişmezdir", "bu nesnenin mutasyona uğrayacak biraz daha fazla arjane sözdizimi gerektirdiği" anlamına gelmez. – Tommy

2
NSArray aksine

ve NSDictionary değişken Foundation toplama türleri NSMutableArray ve NSMutableDictionary Swift muadillerine köprülü değildir. sözlükte tüm değerleri dizeleri

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

Çözüm doğrudur, ancak bazı nedenlerden dolayı değiştirilebilen nesneler için NSMutableDictionary kullanıyorum. Hızlı yerel tipler, yalnızca hızlı bir şekilde programlanırken daima en iyi seçimdir. – Jitendra

-1

Umut bu şekilde can ise daha uygun hala -

kolay çözüm Swift yerli türleri

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

Veya kullanarak tutmaktır mutableDictionary as NSDictionary as? [String: AnyObject] aynı şekilde yardımcı olur NSMutableArray üzerinde çalışır.

İlgili konular