दिलचस्प पोस्ट
JSF 2.0 / 2.1 में CDI द्वारा @ManagedBean / @ViewScope को कैसे बदलें जेपीएनएल के लिए addMouseListener () और paintComponent () का उपयोग करना LinearLayout के साथ स्क्रीन के नीचे बटन रखो? ऐंचैर्टगेंइन – एक्स अक्ष के रूप में तारीखों का उपयोग कैसे कर सकता है – मैं जो फ़ाइल सहेज रहा हूं वह खाली है I आंतरिक संग्रहण से एक फ़ाइल बनाएं और साझा करें क्यों करता है ('0'? 'ए': 'बी') ('0' == सच? 'ए': 'बी') से अलग व्यवहार करते हैं त्रुटि: एलडी: कोकोआड्स के साथ- lPods के लिए लाइब्रेरी नहीं मिली क्या करता है ? … : … कर? Monomorphism प्रतिबंध क्या है? मैं एक सबप्रोसेस से कैसे 'वास्तविक-समय' सूचना वापस प्राप्त कर सकता हूं। पायथन में पॉपिन (2.5) क्या जावा भाषा के नियमों के कारण या jvm के कारण बाइट को आंतों में जोड़ा जाता है? एडीबी सर्वर पुराना है जावास्क्रिप्ट एकल कैसे थ्रेडेड है? एक बटन गोल करें बाइट्स की सरणी को bitmapimage में कनवर्ट करें

NSDictionary में शून्य मान का पता लगाएं

मेरे पास एक NSDictionary जो एक एपीआई सर्वर से जेएसएएन प्रतिक्रिया से आबादी है। कभी-कभी इस शब्दकोश में किसी कुंजी के लिए मान Null होते हैं

मैं दिए गए मान लेने की कोशिश कर रहा हूं और इसे डिस्प्ले के लिए एक टेबल सेल के विस्तृत टेक्स्ट में छोड़ देता हूं।

समस्या यह है कि जब मैं NSString में मूल्य को जबरन करने की कोशिश करता हूं तो मुझे क्रैश मिलता है, जो मुझे लगता है क्योंकि मैं किसी Null को स्ट्रिंग में बाध्य करने की कोशिश कर रहा हूं।

ऐसा करने का सही तरीका क्या है?

मैं क्या करना चाहता हूं, ऐसा कुछ है:

 cell.detailTextLabel.text = sensor.objectForKey( "latestValue" ) as NSString 

यहां शब्दकोश का एक उदाहरण है:

 Printing description of sensor: { "created_at" = "2012-10-10T22:19:50.501-07:00"; desc = "<null>"; id = 2; "latest_value" = "<null>"; name = "AC Vent Temp"; "sensor_type" = temp; slug = "ac-vent-temp"; "updated_at" = "2013-11-17T15:34:27.495-07:00"; } 

यदि मुझे सशर्त में इस सब को लपेटने की आवश्यकता है, तो ठीक है। मैं समझ नहीं पाया कि सशर्त क्या है वापस उद्देश्य सी दुनिया में मैं [NSNull null] खिलाफ तुलना [NSNull null] लेकिन ऐसा लगता नहीं है स्विफ्ट में काम करना

Solutions Collecting From Web of "NSDictionary में शून्य मान का पता लगाएं"

आप के as? उपयोग कर सकते हैं as? ऑपरेटर, जो एक वैकल्पिक मूल्य देता है ( nil अगर विफल रहता है)

 if let latestValue = sensor["latestValue"] as? String { cell.detailTextLabel.text = latestValue } 

मैं एक तेज आवेदन में इस उदाहरण का परीक्षण किया

 let x: AnyObject = NSNull() if let y = x as? String { println("I should never be printed: \(y)") } else { println("Yay") } 

और यह सही ढंग से "Yay" प्रिंट करता है, जबकि

 let x: AnyObject = "hello!" if let y = x as? String { println(y) } else { println("I should never be printed") } 

प्रिंट "hello!" जैसा सोचा था।

आप एक नल की उपस्थिति की जांच कर सकते हैं:

 if sensor["latestValue"] is NSNull { // do something with null JSON value here } 

मैं उन संयोजनों का उपयोग कर रहा हूँ अतिरिक्त संयोजन यह जांच करता है कि ऑब्जेक्ट "null"

 func isNotNull(object:AnyObject?) -> Bool { guard let object = object else { return false } return (isNotNSNull(object) && isNotStringNull(object)) } func isNotNSNull(object:AnyObject) -> Bool { return object.classForCoder != NSNull.classForCoder() } func isNotStringNull(object:AnyObject) -> Bool { if let object = object as? String where object.uppercaseString == "NULL" { return false } return true } 

यह विस्तार के रूप में सुंदर नहीं है, लेकिन आकर्षण के रूप में काम करता है 🙂

NSNull किसी भी अन्य की तरह एक वर्ग है इस प्रकार आप इसका उपयोग कर सकते हैं या इसके विपरीत किसी भी ऑब्जेक्ट संदर्भ का परीक्षण करने के लिए।

इस प्रकार, यहां मेरे एक ऐप्स में मेरे पास एक NSArray है जहां हर एन्ट्री कार्ड या NSNull है (क्योंकि आप NSArray में शून्य नहीं डाल सकते हैं)। मैं एनएसएआरआरई को एक सरणी और चक्र के माध्यम से लेता हूं, जिस प्रकार की ऑब्जेक्ट मुझे मिलता है, पर स्विच करता है:

 for card:AnyObject in arr { switch card { // how to test for different possible types case let card as NSNull: // do one thing case let card as Card: // do a different thing default: fatalError("unexpected object in card array") // should never happen! } } 

यह आपके परिदृश्य के समान नहीं है, लेकिन स्विफ्ट में परिवर्तित एक काम ऐप से है, और पूरी सामान्य तकनीक को दर्शाता है

अब के लिए मेरा समाधान:

 func isNull(someObject: AnyObject?) -> Bool { guard let someObject = someObject else { return true } return (someObject is NSNull) } 

परीक्षण अभी तक अच्छा लग रहा है …

परीक्षण अभी तक अच्छा लग रहा है

मुझे एक बहुत ही इसी तरह की समस्या थी और इसे मूल एनएसहित मूल्य के सही प्रकार के लिए कास्टिंग के साथ हल किया गया था। यदि आपकी सेवा इस तरह एक मिश्रित प्रकार JSON ऑब्जेक्ट देता है

 {"id":2, "name":"AC Vent Temp", ...} 

आपको उसके जैसे मूल्यों को प्राप्त करना होगा

 var id:int = sensor.valueForKey("id") as Int; var name:String? = sensor.valueForKey("name") as String; 

यह मेरी समस्या को हल किया था। तेजी से बंद होने के दौरान बड्यूल देखें