2009-11-02 17 views
12

क्या उद्देश्य-सी में इमम्स का उपयोग करने के लिए यह सही (या यहां तक ​​कि वैध तरीका) है? यानी MENUITEM इस्तेमाल नहीं किया है लेकिन सिर्फ एक सूची = 1, लोड = 2, सूची = 3 आदिउद्देश्य-सी में enum का उपयोग कर?

enum menuItems { 
    add = 1 , 
    save  , 
    load  , 
    list  , 
    removeAll , 
    remove  , 
    quit  
}; 

int optionSelect; 

scanf("%d", &optionSelect); 

switch (optionSelect) { 
    case add: 
     //... 
     break; 
} 

चियर्स गैरी

+2

सी टैग जोड़ा गया क्योंकि आप यहां कोई ओब्जे-सी नहीं कर रहे हैं। बस यह इंगित करने के लिए कि मान्य सी ओबीजे-सी के भीतर पूरी तरह मान्य है। :) – Pascal

+0

धन्यवाद SanHolo ... – fuzzygoat

उत्तर

17

आप तो गणना के लिए अर्थपूर्ण अर्थ देना चाहते हैं, आप एक अनुकूलित प्रकार को परिभाषित करने के लिए विचार कर सकते हैं और उस प्रकार के चर के रूप में चर "विकल्प चयन" घोषित कर सकते हैं! कोड में ...

typedef enum menuItems { 
     add = 1, 
     save, 
     load, 
     list, 
     removeAll, 
     remove, 
     quit} MenuItem; 


MenuItem optionSelect; 

scanf("%d", &optionSelect); 

switch (optionSelect) { 
    case add: 
    ... 
    break; 
    . 
    . 
    . 
} 

है, लगभग, एक ही बात आपने लिखा है, लेकिन डेवलपर की ओर से आप चर "optionSelect" करने के लिए एक विशेष अर्थ देते हैं, नहीं सिर्फ एक सरल पूर्णांक!

+1

'NS_ENUM' और' NS_OPTIONS' को देखना सुनिश्चित करें। ये ऐप्पल प्रदान किए गए मैक्रोज़ लेखन enums से अनुमान लगाते हैं। http://nshipster.com/ns_enum-ns_options/ – BergQuester

1

आपका रास्ता काम करेगा। हालांकि, अगर आप चर या मापदंडों के लिए एक प्रकार के रूप menuItems उपयोग करना चाहते हैं, तो आप एक typedef करने की आवश्यकता होगी:

typedef enum {add = 1,save,load,list,removeAll,remove,quit} menuItems; 
menuItems m = add; 
[myobj passItem:m]; 
3

इस में, भविष्य, तो संभवत: यह भी उपयोगी NS_ENUM का उल्लेख है। आप इसे पसंद का उपयोग करेंगे:

typedef NS_ENUM(uint16_t, TYEnummedType) 
{ 
    TYEnummedType1, 
    TYEnummedType2 
}; 

एक सामान्य enum और typedef के रूप में लगभग एक ही प्रभाव पड़ता है, लेकिन स्पष्ट रूप से यह है कि पूर्णांक प्रकार है, जो वास्तव में उपयोगी अगर तुम कभी इन बातों को कहीं पैक करने के लिए चाहते है तय, सटीक होना अन्य उपयोगों के साथ, आपके struct संरेखण में।

यह 10.8 के साथ संस्करण 6 और ओएस एक्स के साथ iOS SDK में जोड़ा गया था, लेकिन यह सिर्फ एक सी मैक्रो है और कुछ भी है कि आप वेनिला typedef और enum साथ नहीं कर सका नहीं जोड़ता है, तो चिंता करने की कोई पश्च संगतता है के बारे में। यह केवल दो चीजों को एक साथ बांधने के लिए स्पष्ट रूप से मौजूद है।

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