将枚举存储在NSArray中?

joe*_*ick 5 iphone cocoa objective-c

我是Objective-C的新手,但在C++和C方面经验丰富.

我想在数组中存储一些枚举常量.在C++中我会做这样的事情:

enum color {RED, BLUE, YELLOW, GREEN};
vector<color> supportedColors;
supportedColors.push_back(RED);
supportedColors.push_back(GREEN);
Run Code Online (Sandbox Code Playgroud)

但是NSArraywill只存储对象指针(id's).那么它们应该如何存储?我可以将它们转换为整数并将它们存储在一个NSNumber对象中,但这看起来很混乱.

我想知道经验丰富的obj-c程序员做了什么?

Ben*_*tto 13

将它们转换为整数并将它们存储在NSNumbers中.:)

本地C类型实际上是Cocoa集合类中的第二类公民,如果你想混合使用,它们通常很复杂.C表示枚举具有整数值,因此以这种方式将它们用作int是安全的.

根据您正在做的事情,您可以通过将枚举包装在实际对象("MyColor")中来简化操作代码,该实际对象具有枚举作为其属性.然后可以根据需要在集合类中抛出这些对象,其中一些前期和运行时开销从perf的角度来看是不太重要的,这取决于您正在做什么.

  • joerick:严格来说,NSNumber对象不能与`switch`语句一起使用.正如Georg提供的那样,绕过它的方法是将NSNumber对象的值作为`int`,*可以*与`switch`语句一起使用,然后使用它. (2认同)