2009-11-02 20 views
12

È questo il modo corretto (o anche valido) di usare emums in Objective-C? vale a dire il menuItem non viene utilizzato, ma solo definisce una lista aggiungere = 1, carico = 2, 3, ecc list =Utilizzare enum in Objective-C?

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

int optionSelect; 

scanf("%d", &optionSelect); 

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

applausi Gary

+2

Aggiunto il tag C poiché non stai facendo alcun Obj-C qui. Solo per segnalare che C valido è totalmente valido all'interno di Obj-C. :) – Pascal

+0

Grazie SanHolo ... – fuzzygoat

risposta

17

Se vuoi dare un significato semantico all'enumerazione, puoi considerare di definire un tipo personalizzato e dichiarare la variabile "optionSelect" come variabile di quel tipo! in codice ...

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


MenuItem optionSelect; 

scanf("%d", &optionSelect); 

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

Cioè, quasi, la stessa cosa che hai scritto, ma dal lato dello sviluppatore dare un significato particolare alla "optionSelect" variabile, non solo un semplice int!

+1

Assicuratevi di controllare 'NS_ENUM' e' NS_OPTIONS'. Queste macro fornite da Apple richiedono molto tempo per scrivere enumerazioni. http://nshipster.com/ns_enum-ns_options/ – BergQuester

1

Il tuo modo funzionerà. Tuttavia, se si desidera utilizzare MenuItems come un tipo per le variabili o parametri, è necessario fare un typedef:

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

In questo, il futuro, è forse anche utile menzionare NS_ENUM. Devi usare le cose come:

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

che ha quasi lo stesso effetto di un normale enum e typedef ma in modo esplicito determina il tipo intero, che è veramente utile se si vuole mai mettere in valigia queste cose da qualche parte, la precisione nell'allineamento struct, tra gli altri usi.

E 'stato aggiunto alla SDK per iOS con la versione 6 e OS X con 10,8, ma è solo una macro C e non aggiunge nulla che non si possa fare con vaniglia typedef e enum, quindi non c'è compatibilità all'indietro di cui preoccuparsi di. Esiste solo esplicitamente per legare insieme le due cose.

Problemi correlati