在Objective-C中使用枚举?

在Objective-C中使用emums是否正确(或甚至是有效的方法)? 即没有使用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; } 

欢呼声gary

如果你想给枚举赋予一个语义含义,你可以考虑定义一个自定义的types,并将variables“optionSelect”声明为该types的variables! 在代码中…

 typedef enum menuItems { add = 1, save, load, list, removeAll, remove, quit} MenuItem; MenuItem optionSelect; scanf("%d", &optionSelect); switch (optionSelect) { case add: ... break; . . . } 

也就是说,几乎和你写的一样,但是从开发者的angular度来看,你给variables“optionSelect”赋予了一个特殊的含义,而不仅仅是一个简单的int!

很好的解释,在这里: 什么是Objective-C中的typedef枚举?

在这里,未来,提到NS_ENUM也许是有帮助的。 你会像这样使用它:

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

这和普通的enumtypedef几乎有相同的效果,但明确地规定了整数types,如果你想要将这些东西打包到某个地方,在structalignment和其他用途中精确定义,这是非常有用的。

它被添加到版本为6的iOS SDK和版本为10.8的OS X,但是它只是一个Cmacros,并没有添加任何你无法用vanilla typedefenum所做的事情,所以没有向后兼容性的问题。 它只是明确地将两者联系在一起。

你的方式将工作。 但是,如果您想将menuItem用作variables或参数的types,则需要执行typedef:

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