Objective-C Language
enums
खोज…
वाक्य - विन्यास
- typedef NS_ENUM (प्रकार, नाम) {...} - प्रकार गणन का प्रकार है और नाम एनम का नाम है। मान "..." में हैं। यह एक बुनियादी एनम और इसके साथ जाने के लिए एक प्रकार बनाता है; Xcode जैसे प्रोग्राम मान लेंगे कि Enum प्रकार के साथ एक वेरिएबल है, जिसमें से एक एनम मान है
एक दुश्मनी को परिभाषित करना
उपरोक्त सिंटैक्स द्वारा एनम को परिभाषित किया गया है।
typedef NS_ENUM(NSUInteger, MyEnum) {
MyEnumValueA,
MyEnumValueB,
MyEnumValueC,
};
आप अपने स्वयं के कच्चे-मानों को गणना प्रकारों पर सेट कर सकते हैं।
typedef NS_ENUM(NSUInteger, MyEnum) {
MyEnumValueA = 0,
MyEnumValueB = 5,
MyEnumValueC = 10,
};
आप पहले मूल्य पर भी निर्दिष्ट कर सकते हैं और सभी निम्नलिखित वृद्धि के साथ इसका उपयोग करेंगे:
typedef NS_ENUM(NSUInteger, MyEnum) {
MyEnumValueA = 0,
MyEnumValueB,
MyEnumValueC,
};
इस enum के वैरिएबल MyEnum enumVar = MyEnumValueA
द्वारा बनाए जा सकते हैं।
ऑब्जेक्टिव-सी में टाइपमफ एनम घोषणा
एक एनम क्रमबद्ध मानों के एक सेट की घोषणा करता है - टाइपडीफ बस इसमें एक आसान नाम जोड़ता है। पहला तत्व 0 है आदि।
typedef enum {
Monday=1,
Tuesday,
Wednesday
} WORKDAYS;
WORKDAYS today = Monday;//value 1
C ++ std :: वेक्टर को परिवर्तित करना एक उद्देश्य-सी सरणी के लिए
कई C ++ लाइब्रेरी enums का उपयोग करते हैं और वैक्टर का उपयोग करके डेटा प्राप्त करते हैं / प्राप्त करते हैं जिसमें enums होते हैं। जैसा कि सी एनम ऑब्जेक्टिव-सी ऑब्जेक्ट नहीं हैं, ऑब्जेक्टिव-सी कलेक्शन का इस्तेमाल सीधे सी एनम के साथ नहीं किया जा सकता है। नीचे दिया गया उदाहरण NSArray और जेनरिक के संयोजन और सरणी के लिए एक आवरण ऑब्जेक्ट का उपयोग करके इससे संबंधित है। इस तरह, संग्रह को डेटा प्रकार के बारे में स्पष्ट किया जा सकता है और सी सरणियों के साथ संभावित मेमोरी लीक के बारे में कोई चिंता नहीं है उद्देश्य-सी वस्तुओं का उपयोग किया जाता है।
यहाँ C enum और Objective-C समतुल्य वस्तु है:
typedef enum
{
Error0 = 0,
Error1 = 1,
Error2 = 2
} MyError;
@interface ErrorEnumObj : NSObject
@property (nonatomic) int intValue;
+ (instancetype) objWithEnum:(MyError) myError;
- (MyError) getEnumValue;
@end
@implementation ErrorEnumObj
+ (instancetype) objWithEnum:(MyError) error
{
ErrorEnumObj * obj = [ErrorEnumObj new];
obj.intValue = (int)error;
return obj;
}
- (MyError) getEnumValue
{
return (MyError)self.intValue;
}
@end
और यहाँ इसका एक संभावित उपयोग Objective-C ++ में किया गया है (परिणामस्वरूप NSArray का उपयोग Objective-C में केवल उन फ़ाइलों के रूप में किया जा सकता है जैसे C ++ का उपयोग नहीं किया गया है)।
class ListenerImpl : public Listener
{
public:
ListenerImpl(Listener* listener) : _listener(listener) {}
void onError(std::vector<MyError> errors) override
{
NSMutableArray<ErrorEnumObj *> * array = [NSMutableArray<ErrorEnumObj *> new];
for (auto&& myError : errors)
{
[array addObject:[ErrorEnumObj objWithEnum:myError]];
}
[_listener onError:array];
}
private:
__weak Listener* _listener;
}
यदि इस तरह के समाधान का उपयोग कई एनमों पर किया जाना है, तो EnumObj (घोषणा और कार्यान्वयन) का निर्माण एक मैक्रो का उपयोग करके किया जा सकता है (समाधान की तरह एक टेम्पलेट बनाने के लिए)।