2010-01-22 19 views
11

मैं ऐसे ही एक कस्टम enum की घोषणा करना चाहते हैं के रूप में एक वर्ग संपत्ति की घोषणा करते हैं:मैं एक enum प्रकार

enum menuItemType 
{ 
    LinkInternal = 0, 
    LinkExternal = 1, 
    Image = 2, 
    Movie = 3, 
    MapQuery = 4 
} 

मेरी वस्तु के लिए एक प्रकार के रूप में:

@interface MenuItem : NSObject {  
    NSMutableString *menuId; 
    NSMutableString *title; 
    enum menuItemType *menuType; 
    NSMutableArray *subMenuItems; 
} 

लेकिन अनिश्चित हूं, जहां मैं enum परिभाषा डालने की आवश्यकता है - अगर मैं इसे @interface से पहले

उत्तर

10

यदि आप इस क्रम में फ़ाइल में अपने दो कोड स्निपेट डालते हैं, तो आपको अंत में ; जोड़ना होगा en enum घोषणा और आप एक enum चर के लिए एक सूचक के बजाय एक enum चर का उपयोग करने पर विचार करना चाह सकते हैं।

यह देता है:

enum menuItemType 
{ 
    LinkInternal = 0, 
    LinkExternal = 1, 
    Image = 2, 
    Movie = 3, 
    MapQuery = 4 
}; 

@interface MenuItem : NSObject {  
    NSMutableString *menuId; 
    NSMutableString *title; 
    enum menuItemType menuType; 
    NSMutableArray *subMenuItems; 
} 
+0

धन्यवाद मैं एक ओबीजे-सी नोब का थोड़ा सा सीख रहा हूं ताकि तेजी से सीख सकूं –

+1

यह उत्तर पुराना है, आधुनिक 'NS_ENUM' का उपयोग करें। @Zedenem उत्तर –

+0

@ proca2.0 देखें - आप सही हैं, इसे इंगित करने के लिए धन्यवाद। दरअसल, सब कुछ उद्देश्य-सी पुराना होने के रास्ते पर है। – mouviciel

5

@mouviciel ठीक है, लेकिन मैंने सोचा कि मैं जाने हूं कि क्या आप चाहते हैं ऑब्जेक्टिव-सी में समर्थित नहीं एक वर्ग संपत्ति, कुछ नहीं है। एक वर्ग संपत्ति वास्तव में एक वैश्विक संपत्ति है जो कक्षा-वस्तु पर सेट है। आप जो सोच रहे थे वह एक सादा पुरानी संपत्ति थी (कक्षा के उदाहरण पर सेट)।

इसके अलावा, आपका कोड दिखाता है कि आप केवल एक आवृत्ति चर का उपयोग कर रहे हैं।

// after @interface {} 
@property (readwrite) enum menuItemType menuType; 

और

// under @implementation 
@synthesize menuType; 

यह एक शॉर्टकट है: संकलक उचित तरीके उत्पन्न होगा पहुँच सकते हैं और menuType संपत्ति को बदलने के लिए उदाहरण चर के रूप में निम्नानुसार एक्सेसर/mutator विधियां जोड़कर गुण में बदल सकता है । मुझे यकीन नहीं है कि यह सब आपके लिए कितना उपयोगी है, लेकिन यह आपको उद्देश्य-सी अर्थशास्त्र की आपकी समझ से मदद करेगा।

15

अगर किसी को हमारे भविष्य के समय में इस पर ठोकर खाती है तो बस इसे अपडेट करना।

iOS 6/Mac OS X 10.8 के बाद से, नई NS_ENUM और NS_OPTIONS मैक्रो enum प्रकार की घोषणा करने के लिए पसंदीदा तरीका है।

उस मामले में, यह दिखाई देगा:

typedef NS_ENUM(NSInteger, MenuItemType) { 
    LinkInternal = 0, 
    LinkExternal = 1, 
    Image = 2, 
    Movie = 3, 
    MapQuery = 4 
}; 

@interface MenuItem : NSObject {  
    NSMutableString *menuId; 
    NSMutableString *title; 
    MenuItemType menuType; 
    NSMutableArray *subMenuItems; 
} 

विषय पर एक अच्छा पढ़ा: http://nshipster.com/ns_enum-ns_options/

तुम भी enum नामकरण के लिए एप्पल के परंपराओं के अनुरूप और की तरह कुछ के लिए जाना चाहते हो सकता है:

typedef NS_ENUM(NSInteger, MenuItemType) { 
    MenuItemTypeLinkInternal = 0, 
    MenuItemTypeLinkExternal = 1, 
    MenuItemTypeImage = 2, 
    MenuItemTypeMovie = 3, 
    MenuItemTypeMapQuery = 4 
}; 

आशा है कि इससे मदद मिलेगी।

+0

इतनी पुरानी पोस्ट को बंप करने के लिए आपको बेरेट करने वाला था ... लेकिन गंभीरता से, यह कमाल है। मैंने अभी अपनी वर्तमान परियोजना को बदल दिया है। NS_OPTIONS भी प्यार करें। – Fogmeister

संबंधित मुद्दे