Использование enum в Objective-C? - PullRequest
13 голосов
/ 02 ноября 2009

Это правильный (или даже правильный) способ использовать emums в Objective-C? то есть menuItem не используется, а просто определяет список add = 1, load = 2, list = 3 и т. д.

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

int optionSelect;

scanf("%d", &optionSelect);

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

Ура Гэри

Ответы [ 4 ]

17 голосов
/ 02 ноября 2009

Если вы хотите придать перечислению смысловой смысл, вы можете определить настраиваемый тип и объявить переменную "optionSelect" как переменную этого типа! В коде ...

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


MenuItem optionSelect;

scanf("%d", &optionSelect);

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

Это почти то же самое, что вы написали, но со стороны разработчика вы придаете конкретное значение переменной optionSelect, а не просто int!

6 голосов
/ 02 ноября 2009

хорошее объяснение, прямо здесь: Что такое перечисление типов в Objective-C?

3 голосов
/ 05 октября 2013

В этом будущем, возможно, также полезно упомянуть NS_ENUM. Вы бы использовали это как:

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

Это имеет почти такой же эффект, как нормальные enum и typedef, но явно диктует целочисленный тип, который действительно полезен, если вы когда-нибудь захотите упаковать эти вещи куда-то, будьте точны в вашем struct выравнивании среди других целей.

Он был добавлен в iOS SDK с версией 6 и OS X с 10.8, но это всего лишь макрос C и не добавляет ничего, что вы не могли бы сделать с vanilla typedef и enum, поэтому нет обратной. совместимость беспокоиться. Он существует только в явном виде, чтобы связать две вещи вместе.

1 голос
/ 05 октября 2013

Твой путь будет работать. Однако, если вы хотите использовать menuItems в качестве типа для переменных или параметров, вам нужно выполнить typedef:

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