在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 };
这和普通的enum
和typedef
几乎有相同的效果,但明确地规定了整数types,如果你想要将这些东西打包到某个地方,在struct
alignment和其他用途中精确定义,这是非常有用的。
它被添加到版本为6的iOS SDK和版本为10.8的OS X,但是它只是一个Cmacros,并没有添加任何你无法用vanilla typedef
和enum
所做的事情,所以没有向后兼容性的问题。 它只是明确地将两者联系在一起。
你的方式将工作。 但是,如果您想将menuItem用作variables或参数的types,则需要执行typedef:
typedef enum {add = 1,save,load,list,removeAll,remove,quit} menuItems; menuItems m = add; [myobj passItem:m];