Подтвердить что ты не робот

Использование перечисления в Objective-C?

Правильно ли (или даже допустимый способ) использовать emums в Objective-C? т.е. элемент меню не используется, а просто определяет список 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;
}

cheers gary

4b9b3361

Ответ 1

Если вы хотите дать семантический смысл перечислению, вы можете рассмотреть возможность определения настраиваемого типа и объявить переменную "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!

Ответ 3

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

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

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

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

Ответ 4

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

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