2009-11-02 12 views
12

Czy jest to właściwy (lub nawet ważny sposób) używania emums w Objective-C? czyli MENUITEM nie służy jednak tylko definiuje lista dodać = 1, load = 2, wykaz = 3 itdUżycie enum w Objective-C?

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

int optionSelect; 

scanf("%d", &optionSelect); 

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

okrzyki gary

+2

Dodano tag C, ponieważ nie robisz tutaj żadnego Obj-C. Tylko zwrócić uwagę, że prawidłowe C jest całkowicie prawidłowe w Obj-C. :) – Pascal

+0

Dzięki SanHolo ... – fuzzygoat

Odpowiedz

17

Jeśli chcesz nadać semantyczne znaczenie wyliczeniu, możesz rozważyć zdefiniowanie niestandardowego typu i zadeklarować zmienną "optionSelect" jako zmienną tego typu! W kodzie ...

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


MenuItem optionSelect; 

scanf("%d", &optionSelect); 

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

Oznacza to, że prawie, to samo masz napisane, ale od strony dewelopera dać szczególne znaczenie dla zmiennej „optionSelect”, a nie tylko proste int!

+1

Pamiętaj, aby sprawdzić "NS_ENUM" i "NS_OPTIONS". Te makra dostarczone przez firmę Apple zajmują dużo miejsca przy pisaniu wyrażeń. http://nshipster.com/ns_enum-ns_options/ – BergQuester

1

Twoja droga zadziała. Jednakże, jeśli chcesz używać elementów menu jako typ dla zmiennych lub parametrów, trzeba będzie zrobić typedef:

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

w tym, w przyszłości, to może również pomocne wspomnieć NS_ENUM. Można by użyć go lubię:

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

To ma prawie taki sam efekt jak normalny enum i typedef ale wyraźnie dyktuje rodzaj całkowitą, która jest bardzo pomocna, jeśli kiedykolwiek chcesz zapakować te rzeczy gdzieś, być precyzyjne w twoim ustawieniu struct, wśród innych zastosowań.

Został on dodany do iOS SDK w wersji 6 i OS X 10.8, ale to tylko C makro i nie dodaje nic, że nie można zrobić z wanilii typedef i enum, więc nie ma wstecznej kompatybilności martwić o. Istnieje tylko jednoznaczne powiązanie dwóch rzeczy.