关于ios:在Objective-C中使用枚举?

Using enum in Objective-C?

在目标C中使用EMUMS是否正确(甚至是有效的方法)?也就是说,不使用menuitem,只定义了list add=1、load=2、list=3等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
enum menuItems {
    add = 1    ,
    save       ,
    load       ,
    list       ,
    removeAll  ,
    remove     ,
    quit      
};

int optionSelect;

scanf("%d", &optionSelect);

switch (optionSelect) {
    case add:
        //...
        break;
}

欢呼加里


如果要为枚举赋予语义意义,可以考虑定义自定义类型并将变量"optionselect"声明为该类型的变量!在代码中…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
typedef enum menuItems {
       add = 1,
       save,
       load,
       list,
       removeAll,
       remove,
       quit} MenuItem;


MenuItem optionSelect;

scanf("%d", &optionSelect);

switch (optionSelect) {
    case add:
    ...
    break;
    .
    .
    .
}

这几乎与您编写的内容相同,但从开发人员的角度来说,您为变量"optionselect"赋予了特定的含义,而不仅仅是简单的int!


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


在这方面,在未来,提到NS_ENUM可能也会有所帮助。你可以这样使用它:

1
2
3
4
5
typedef NS_ENUM(uint16_t, TYEnummedType)
{
    TYEnummedType1,
    TYEnummedType2
};

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

它被添加到iOS SDK版本6和OS X版本10.8中,但它只是一个C宏,不能添加任何您不能用Vanilla typedefenum做的事情,因此不需要担心向后兼容性。它的存在只是明确地把这两件事联系在一起。


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

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