在Objective-C中使用emum这是正确的(甚至是有效的方法)吗?即,未使用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;
}
欢呼加里
答案 0 :(得分:17)
如果要为枚举赋予语义含义,可以考虑定义自定义类型,并将变量“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!
答案 1 :(得分:6)
很好的解释,就在这里:What is a typedef enum in Objective-C?
答案 2 :(得分:3)
在此,未来,提及NS_ENUM
可能也会有所帮助。你会像以下一样使用它:
typedef NS_ENUM(uint16_t, TYEnummedType)
{
TYEnummedType1,
TYEnummedType2
};
这与普通enum
和typedef
具有几乎相同的效果,但是明确规定了整数类型,如果您想要将这些东西打包到某个地方,这非常有用,在您的{ {1}}对齐,以及其他用途。
它被添加到版本为6的iOS SDK和带有10.8的OS X,但它只是一个C宏,并没有添加任何你不能用vanilla struct
和typedef
做的事情,因此无需担心向后兼容性。它只是明确存在以将两者结合在一起。
答案 3 :(得分:1)
你的方式会奏效。但是,如果您想将menuItems用作变量或参数的类型,则需要执行typedef:
typedef enum {add = 1,save,load,list,removeAll,remove,quit} menuItems;
menuItems m = add;
[myobj passItem:m];