2009-11-02 16 views
12

¿Es esta la forma correcta (o incluso válida) de usar emums en Objective-C? es decir, el menuItem no se utiliza, pero sólo define una lista añadir = 1, carga = 2, 3, etc. list =¿Usar enum en Objective-C?

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

int optionSelect; 

scanf("%d", &optionSelect); 

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

aplausos Gary

+2

Se agregó la etiqueta C ya que aquí no está haciendo ningún Obj-C. Solo para señalar que C válido es totalmente válido dentro de Obj-C. :) – Pascal

+0

Gracias SanHolo ... – fuzzygoat

Respuesta

17

Si quiere dar un significado semántico a la enumeración, puede considerar definir un tipo personalizado y declarar la variable "optionSelect" como variable de ese tipo. En código ...

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


MenuItem optionSelect; 

scanf("%d", &optionSelect); 

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

Eso es, casi, lo mismo que ha escrito, pero desde el lado del desarrollador le dará un significado particular a la "optionSelect" variables, no sólo un int simple!

+1

Asegúrese de revisar 'NS_ENUM' y' NS_OPTIONS'. Estas macros proporcionadas por Apple eliminan las conjeturas al escribir enum. http://nshipster.com/ns_enum-ns_options/ – BergQuester

1

Su camino funcionará. Sin embargo, si desea utilizar los elementos del menú como un tipo de variables o parámetros, tendrá que hacer un typedef:

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

En esto, el futuro, que es, posiblemente, también es útil mencionar NS_ENUM. Se podría utilizarlo como:

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

que tiene casi el mismo efecto que una normal, y enumtypedef sino explícitamente determina el tipo entero, que es realmente útil si alguna vez quiere embalar estas cosas a alguna parte, será preciso en su alineación struct, entre otros usos.

Se añadió a la SDK de iOS con la versión 6 y OS X con 10,8, pero es sólo una macro C y no aporta nada que no se podía hacer con vainilla typedef y enum, así que no hay compatibilidad hacia atrás que preocuparse acerca de. Existe solo explícitamente para unir las dos cosas.

Cuestiones relacionadas