मुझे यह जांचने की आवश्यकता है कि क्या वस्तु प्रकार की है NSStringया नहीं UIImageView। मैं यह कैसे हासिल कर सकता हूं? क्या "आइसोफ़ाइप" विधि का कोई प्रकार है?
मुझे यह जांचने की आवश्यकता है कि क्या वस्तु प्रकार की है NSStringया नहीं UIImageView। मैं यह कैसे हासिल कर सकता हूं? क्या "आइसोफ़ाइप" विधि का कोई प्रकार है?
जवाबों:
यदि आपकी वस्तु है myObject, और आप यह देखना चाहते हैं कि क्या यह एक है NSString, तो कोड परीक्षण करेगा:
[myObject isKindOfClass:[NSString class]]
इसी तरह, यदि आप myObjectएक के लिए परीक्षण करना चाहते थे UIImageView:
[myObject isKindOfClass:[UIImageView class]]
आप शायद इस्तेमाल करेंगे
- (BOOL)isKindOfClass:(Class)aClass
यह एक विधि है NSObject।
अधिक जानकारी के लिए जाँच करें NSObject प्रलेखन की ।
इस तरह आप इसका उपयोग करते हैं।
BOOL test = [self isKindOfClass:[SomeClass class]];
आप इस तरह से कुछ करने की कोशिश भी कर सकते हैं
for(id element in myArray)
{
NSLog(@"=======================================");
NSLog(@"Is of type: %@", [element className]);
NSLog(@"Is of type NSString?: %@", ([[element className] isMemberOfClass:[NSString class]])? @"Yes" : @"No");
NSLog(@"Is a kind of NSString: %@", ([[element classForCoder] isSubclassOfClass:[NSString class]])? @"Yes" : @"No");
}
className, यह OS X पर काम कर सकता है या नहीं भी कर सकता है, लेकिन यह iOS में नहीं है और इसका उपयोग इसके लिए नहीं किया जाता है। इसके अलावा, वे NSLogऐसा नहीं करते हैं जो मुझे लगता है कि आप उनका मतलब था - वे वास्तविक तत्व के वर्ग के बजाय, वर्ग नाम (हमेशा एक स्ट्रिंग) और कोडर वर्ग की जांच कर रहे हैं।
NSLog(@"Is of type: %@", [element class]); iOS 7 में काम करेगा
जब आप एक सुपरक्लास और विरासत के बीच अंतर करना चाहते हैं तो आप इसका उपयोग कर सकते हैं:
if([myTestClass class] == [myInheritedClass class]){
NSLog(@"I'm the inheritedClass);
}
if([myTestClass class] == [mySuperClass class]){
NSLog(@"I'm the superClass);
}
- (BOOL)isKindOfClass:(Class)aClassइस मामले में उपयोग करने से TRUE का परिणाम दोनों बार होगा, क्योंकि इनहेरिटेडक्लास भी एक प्रकार का सुपरक्लास है।
isMemberOfClass:NOउपवर्गों के साथ व्यवहार करते समय वापस आ जाएगा ।
एक सरल परीक्षण चल रहा है, मैंने सोचा कि मैं क्या काम करता हूं और क्या नहीं करता है। अक्सर मैं यह देखने के लिए लोगों को देखता हूं कि क्या वस्तु का वर्ग अन्य वर्ग का सदस्य है या अन्य वर्ग के बराबर है।
नीचे की रेखा के लिए, हमारे पास कुछ खराब तरीके से बनाए गए डेटा हैं जो एक NSArray, NSDictionaryया एक हो सकते हैं (null)।
NSArray *hits = [[[myXML objectForKey: @"Answer"] objectForKey: @"hits"] objectForKey: @"Hit"];
ये परीक्षण किए गए हैं:
NSLog(@"%@", [hits class]);
if ([hits isMemberOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isMemberOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSDictionary class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSArray class]]) {
NSLog(@"%@", [hits class]);
}
if ([hits isKindOfClass:[NSMutableArray class]]) {
NSLog(@"%@", [hits class]);
}
isKindOfClassजबकि अच्छी तरह से काम नहीं isMemberOfClassकिया।
[object isKindOfClass:[ClassName class]]