2016-02-06 8 views
6

कोड काम कर रहा है, लेकिन मैं इस चेतावनी को कैसे चुप कर सकता हूं जो हर बार दिखाई देता है? से[स्ट्रिंग: AnyObject] से असंबद्ध प्रकार से कास्ट किया गया एनएसएमयूटेबल डिक्शनरी हमेशा विफल रहता है चेतावनी

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

डाली '[स्ट्रिंग: AnyObject]' असंबंधित प्रकार 'NSMutableDictionary हमेशा चेतावनी विफल रहता है

SavedUserModel जानकारी संग्रहित बचाया करने के लिए: -

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

आप अपने शब्दकोश को म्यूटेबल क्यों करना चाहते हैं? – Tommy

+0

क्योंकि शब्दकोश की सामग्री रनटाइम पर बदल सकती है। चूंकि उपयोगकर्ता किसी भी समय विवरण बदल/संपादित कर सकता है। @ टॉमी – Jitendra

+0

आपके द्वारा दिए गए कोड को शब्दकोश से चार आइटम दिखते हैं और फिर कभी इसका उपयोग नहीं करते हैं। – Tommy

उत्तर

4

के बजाय ऐसे

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

इस के साथ

:

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

आप आसानी से यह एक NSDictionary में डाला सकता है, लेकिन जब आप एक NSMutableDictionary चाहते किसी कारण से, आप के साथ NSMutableDictionary(dictionary:)

संपादित एक नया एक को प्रारंभ करने के लिए है : इस सवाल पर @ टॉमी द्वारा टिप्पणी क्यों देखें, यह आवश्यक क्यों है।

+0

ग्रेट यह काम किया !! :) @addison – Jitendra

+0

बहुत बढ़िया! स्वीकार्य उत्तर के रूप में इसे चुनना याद रखें :) – Addison

+1

"किसी कारण से" यह है कि आप एक अपरिवर्तनीय शब्दकोश से शुरू कर रहे हैं। यह अजीब बात नहीं है कि भाषा आपको इसे बदलने की कोशिश करने की अनुमति नहीं देगी। "यह ऑब्जेक्ट अपरिवर्तनीय है" इसका मतलब यह नहीं है कि "इस ऑब्जेक्ट को उत्परिवर्तित करने के लिए थोड़ा अधिक आर्केन वाक्यविन्यास की आवश्यकता है"। – Tommy

2

NSArray के विपरीत और NSDictionary परिवर्तनशील Foundation संग्रह प्रकार NSMutableArray और NSMutableDictionary स्विफ्ट समकक्षों के पाट नहीं कर रहे हैं। और अधिक सुविधाजनक अभी भी अगर शब्दकोश में सभी मानों को स्ट्रिंग्स

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

समाधान सही है हालांकि कुछ कारणों से मैं mutable ऑब्जेक्ट्स के लिए NSMutableDictionary का उपयोग कर रहा हूं। यदि हम केवल स्विफ्ट में प्रोग्रामिंग कर रहे हैं तो स्विफ्ट देशी प्रकार हमेशा सर्वोत्तम विकल्प होते हैं। – Jitendra

-1

आशा इस तरह से कर सकते हैं कर रहे हैं -

सबसे आसान समाधान स्विफ्ट का उपयोग कर देशी प्रकार

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

या रखने के लिए है आपकी मदद करें: mutableDictionary as NSDictionary as? [String: AnyObject] उसी तरह NSMutableArray पर काम करता है।

संबंधित मुद्दे