Использование перечисления в 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
Ответы
Ответ 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!
Ответ 2
Хорошее объяснение, прямо здесь: Что такое перечисление typedef в Objective-C?
Ответ 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];