एक उदाहरण से वर्ग का नाम प्राप्त करना


142

मुझे निम्नलिखित समस्या है: मुझे पास की गई कक्षा का एक उदाहरण मिलता है और मैं इस उदाहरण के वर्ग का नाम जानना चाहता हूं। इसको कैसे लें?


शायद अपने प्रश्न को फिर से लिखें या प्रश्न से मेल खाने वाले उत्तर को स्वीकार करें?
जैस्पर ब्लूज

@ जैस्पर ब्लूस: हो गया, यह भी नहीं पता कि यह कितना लोकप्रिय हुआ!
रॉबिन

जवाबों:


396

NSStringFromClass([instance class]) चाल चलनी चाहिए।


33
प्रश्न का उत्तर देने के लिए अपग्रेड किया गया ताकि जरूरत पड़ने की बजाय गोगलर्स को उत्तर मिल सके।
Gleno

2
#import <objc/objc-runtime.h>एक उदाहरण पर कॉल कॉल करने में सक्षम याद रखें ।
जेपी इलनेस ने

28

यदि आप सब करना चाहते हैं तो यह देखने के लिए एक ऑब्जेक्ट का परीक्षण करें कि क्या यह एक निश्चित कक्षा का एक प्रकार है

BOOL test = [self isKindOfClass:[SomeClass class]];

18

कक्षा के भीतर से ही

-(NSString *) className
{
    return NSStringFromClass([self class]);
}

2
बिल्कुल अपने गुस्से को जगाना नहीं चाहते हैं, लेकिन यह आपकी प्रोफ़ाइल में iOS से संबंधित दूसरा जवाब था। मुझे केवल यह जोड़ना प्रतीत होता है कि हम इसके क्रियान्वयन के भीतर से एक उदाहरण को "स्वयं" के रूप में संदर्भित कर सकते हैं। क्या आप इसे तीन साल पुराने स्वीकृत उत्तर से काफी हद तक जोड़कर देखेंगे?
दन्ह

@danh मैं देख रहा हूँ आप मुझे शिकार कर रहे हैं। आपके लिए अच्छा हैं!
केट्रेडल पिलोन

क्षमा करें, मैंने अभी इस पर क्लिक किया है, और इस बारे में बहस की है कि क्या कुछ भी कहना है। बस कुछ कोमल रिबिंग करना चाहता था, लेकिन मुझे पता है कि इन अर्ध-फेसलेस सेटिंग्स में टेम्पर्स बहुत जल्दी गर्म हो जाते हैं। इसके बारे में अच्छे स्वभाव के लिए धन्यवाद। (वास्तव में, एनकैप्सुलेशन का अभ्यास करने के लिए +1)।
22

2
यह परेशानी के अलावा जवाब के लिए कुछ भी नहीं जोड़ता है।
निकोलाई रुहे

1
इसे एक वर्ग विधि बनाना चाहिए
भूमी मुचादिया

2

बस एक श्रेणी जोड़ें:

NSObject+Extensions.h
- (NSString *)className;

NSObject+Extensions.m
- (NSString *)className {
    return NSStringFromClass(self.class);
}

फिर निम्नलिखित कोड का उपयोग करें:

NSString *className = [[SomeObject new] className];

या और भी:

NSString *className = SomeObject.new.className;

इसे कहीं भी उपयोग करने के लिए श्रेणी को YourProject.pch फ़ाइल में जोड़ें।


यदि स्विफ्ट क्लास पर कॉल किया जाता है, तो यह एक नामांकित वर्गनाम देता है।
Alper


1

ObjC:

NSStringFromClass([instance class])

स्विफ्ट

उदाहरण से:

String(describing: YourType.self)

प्रकार से:

String(describing: self)

0

यदि आप देख रहे हैं कि स्विफ्ट में क्लासनाम कैसे मिलता है तो आप ऑब्जेक्ट के बारे में जानकारी प्राप्त करने के लिए प्रतिबिंबित का उपयोग कर सकते हैं।

let tokens = split(reflect(self).summary, { $0 == "." })
if let typeName = tokens.last {
    println(typeName)
}

या सिर्फself.dynamicType
jbg
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.