【问题标题】:Using enum in Objective-C?在 Objective-C 中使用枚举?
【发布时间】:2010-12-12 08:12:21
【问题描述】:

这是在 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;
}

干杯加里

【问题讨论】:

  • 添加了 C 标签,因为您在这里没有做任何 Obj-C。只是指出有效的 C 在 Obj-C 中是完全有效的。 :)

标签: ios objective-c c enums


【解决方案1】:

如果要给枚举赋予语义意义,可以考虑定义一个自定义类型,并将变量“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!

【讨论】:

【解决方案2】:

在未来,提及NS_ENUM 可能也会有所帮助。你会像这样使用它:

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

这与普通的enumtypedef 具有几乎相同的效果,但明确规定了整数类型,如果您想将这些东西打包到某个地方,这真的很有帮助,请在您的struct 对齐中精确,除了其他用途。

它被添加到 iOS SDK 版本 6 和 OS X 10.8,但它只是一个 C 宏,并没有添加任何你不能用 vanilla typedefenum 做的东西,所以没有倒退兼容性担心。它的存在只是为了将这两件事明确地联系在一起。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多