मैं कैसे परीक्षण करूं कि क्या ऑब्जेक्ट ऑब्जेक्टिव-सी में एक विशेष वर्ग का उदाहरण है? मान लीजिए कि मैं देखना चाहता हूं कि क्या वस्तु वर्ग b, या वर्ग c का उदाहरण है, मैं इसे कैसे करूं?
मैं कैसे परीक्षण करूं कि क्या ऑब्जेक्ट ऑब्जेक्टिव-सी में एक विशेष वर्ग का उदाहरण है? मान लीजिए कि मैं देखना चाहता हूं कि क्या वस्तु वर्ग b, या वर्ग c का उदाहरण है, मैं इसे कैसे करूं?
जवाबों:
यह जांचने के लिए कि क्या ऑब्जेक्ट कक्षा का एक उदाहरण है:
[yourObject isKindOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of
// given class or an instance of any class that inherits from that class.
या
[yourObject isMemberOfClass:[a class]]
// Returns a Boolean value that indicates whether the receiver is an instance of a
// given class.
ऑब्जेक्ट का क्लास नाम पाने के लिए आप NSStringFromClassफ़ंक्शन का उपयोग कर सकते हैं :
NSString *className = NSStringFromClass([yourObject class]);
या सी-फ़ंक्शन ऑब्जेक्टिव-सी रनटाइम एपीआई से:
#import <objc/runtime.h>
/* ... */
const char* className = class_getName([yourObject class]);
NSLog(@"yourObject is a: %s", className);
EDIT: स्विफ्ट में
if touch.view is UIPickerView {
// touch.view is of type UIPickerView
}
class_getNameओवर का उपयोग करने का क्या फायदा है NSStringFromClass? यदि कोई नहीं है, तो इस उत्तर को समायोजित किया जाना चाहिए।
आप भी उपयोग कर सकते हैं
NSString *className = [[myObject class] description];
किसी भी NSObject पर
Apple दस्तावेज़ीकरण में isKindOfClass के बारे में क्या मतलब है
क्लास क्लस्टर द्वारा दर्शाई गई वस्तुओं पर इस पद्धति का उपयोग करते समय सावधान रहें। क्लास क्लस्टर के स्वभाव के कारण, आपको जो वस्तु वापस मिलती है वह हमेशा आपके द्वारा अपेक्षित प्रकार नहीं हो सकती है। यदि आप किसी विधि को क्लास क्लस्टर लौटाते हैं, तो विधि द्वारा दिया गया सटीक प्रकार उस ऑब्जेक्ट के साथ क्या कर सकता है, इसका सबसे अच्छा संकेतक है। उदाहरण के लिए, यदि कोई विधि NSArray ऑब्जेक्ट के लिए एक पॉइंटर लौटाती है, तो आपको यह देखने के लिए इस पद्धति का उपयोग नहीं करना चाहिए कि क्या सरणी म्यूट है, जैसा कि निम्नलिखित कोड में दिखाया गया है:
// DO NOT DO THIS!
if ([myArray isKindOfClass:[NSMutableArray class]])
{
// Modify the object
}
यदि आप अपने कोड में ऐसे निर्माणों का उपयोग करते हैं, तो आप सोच सकते हैं कि किसी वस्तु को संशोधित करना ठीक है कि वास्तव में संशोधित नहीं किया जाना चाहिए। ऐसा करने पर अन्य कोड के लिए समस्याएँ उत्पन्न हो सकती हैं, जिससे ऑब्जेक्ट के अपरिवर्तित रहने की उम्मीद होती है।
-isKindOfClass:और -isMemberOfClass:एक वर्ग के क्लस्टर के भीतर वस्तुओं की पहचान करने के लिए नहीं किया जाना चाहिए।
यदि आप एक विशिष्ट वर्ग के लिए जाँच करना चाहते हैं तो उपयोग कर सकते हैं
if([MyClass class] == [myClassObj class]) {
//your object is instance of MyClass
}
अगर आप क्लास का नाम पाना चाहते हैं, तो कॉल करें: -
id yourObject= [AnotherClass returningObject];
NSString *className=[yourObject className];
NSLog(@"Class name is : %@",className);