在Objective-C中使用枚举?

时间:2009-11-02 16:09:00

标签: ios objective-c c enums

在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;
}
欢呼加里

4 个答案:

答案 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
};

这与普通enumtypedef具有几乎相同的效果,但是明确规定了整数类型,如果您想要将这些东西打包到某个地方,这非常有用,在您的{ {1}}对齐,以及其他用途。

它被添加到版本为6的iOS SDK和带有10.8的OS X,但它只是一个C宏,并没有添加任何你不能用vanilla structtypedef做的事情,因此无需担心向后兼容性。它只是明确存在以将两者结合在一起。

答案 3 :(得分:1)

你的方式会奏效。但是,如果您想将menuItems用作变量或参数的类型,则需要执行typedef:

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