2011-10-25 13 views

उत्तर

84
if([obj isKindOfClass:[NSArray class]]){ 
    //Is array 
}else if([obj isKindOfClass:[NSDictionary class]]){ 
    //is dictionary 
}else{ 
    //is something else 
} 
12

[myObject isKindOfClass:[NSArray class]] 

और

[myObject isKindOfClass:[NSDictionary class]] 

इन दोनों का प्रयास करें BOOL मान चाहिए। यह NSObject विधि के बुनियादी इस्तेमाल होता है: In Objective-C, how do I test the object type?

8

मामला है जब आप एक JSON या XML से डेटा पार्स करने कर रहे हैं पर विचार करें:

-(BOOL)isKindOfClass:(Class)aClass 

में थोड़ा और अधिक जानकारी के लिए इस सवाल का जवाब यहाँ देख प्रतिक्रिया। आप जिस पार्सिंग लाइब्रेरी का उपयोग कर रहे हैं उसके आधार पर, आप एनएसएआरआरएएस या एनएसडीयूज के साथ समाप्त नहीं हो सकते हैं। इसके बजाय आपके पास __NSCFArray या __NSCFDictionary हो सकता है। शायद ज़रुरत पड़े

if([unknownObject respondsToSelector:@selector(lastObject)]){ 

// You can treat unknownObject as an NSArray 
}else if([unknownObject respondsToSelector:@selector(allKeys)]){ 

// You can treat unknown Object as an NSDictionary 
} 
+2

-1 कई वस्तुओं प्रतिसाद दे सकता है वही चयनकर्ताओं के लिए, विशेष रूप से 'LastObject' या' allKeys 'के रूप में सामान्य के रूप में कुछ। 'IsKindOfClass का उपयोग करना: 'एनएसएआरएआरई' और' NSDictionary' जैसे क्लास क्लस्टर से निपटने के लिए स्पष्ट रूप से जाने का तरीका है। – Calrion

+1

वह उत्तर कुल बकवास है। [myObject isKindOfClass: [NSArray क्लास]] सही ढंग से सवाल का जवाब देता है "क्या मेरा ऑब्जेक्ट व्यवहार करेगा जैसे यह एक एनएसएआरएआरई है", और यही वही है जो आप चाहते हैं। कोई चयनकर्ता नहीं है कि केवल एक एनएसएआरएआरई या एनएस डिक्शनरी जवाब दे। दो मिनट में मैं उदाहरण के तरीकों के साथ एक वर्ग बना सकता हूं "allKeys" और "lastObject"। या NSArray के लिए एक श्रेणी विधि के रूप में "allKeys" जोड़ें। – gnasher729

0

:

उस मामले में, आप एक सरणी है या एक शब्दकोश है कि क्या यह प्रतिक्रिया करता है की जाँच करने के लिए एक चयनकर्ता है कि केवल एक सरणी या शब्दकोश का जवाब होता है कि क्या सबसे अच्छा तरीका है की जाँच करने के कोई भी स्विफ्ट समकक्ष की तलाश में इस पार्टी के लिए देर से आता है, यहां आप जाते हैं। यह एक बहुत अधिक ऑब्जेक्टिव-सी संस्करण, IMHO से सुरुचिपूर्ण है, क्योंकि न केवल यह प्रकार की जाँच करता है, लेकिन यह एक ही समय में इच्छित प्रकार के लिए उन्हें डाले:

if let arrayVersion = obj as? NSArray { 
    // arrayVersion is guaranteed to be a non-`nil` NSArray 
} else if let dictionaryVersion = obj as? NSDictionary { 
    // dictionaryVersion is guaranteed to be a non-`nil` NSDictionary 
} else { 
    // it's neither 
} 
संबंधित मुद्दे