具有相同文字的不同Objective-C枚举

时间:2014-08-26 16:51:50

标签: objective-c enums

我希望有两个不同的enum,但它们可能具有相同的字面值;例如:

typedef enum {ONE,TWO,THREE,FOUR,FIVE,SIX} NumbersEnum;
typedef enum {ONE,TWO,THREE,FIVE,EIGHT} FibonacciEnum;

这会引发编译错误,因为ONETWOTHREEFIVE会在enum中重复出现。

有没有办法让这个工作按原样(不改变文字名称或添加前缀或后缀)?

使用文字的代码是否有任何方式可以如下所示:int num = NumbersEnum.SIX;而不是int num = SIX;

2 个答案:

答案 0 :(得分:1)

没有。从一开始就是C和Objective-C语言的一部分。你不会改变它,没有人会为你改变它。

答案 1 :(得分:1)

你不能用enum s做到这一点;他们的成员是全球性的,名称必须是唯一的。但是,您可以使用make pseudo-namespaces for constants来{{3}}进行{{3}}的简洁技术。

在相应的标题中声明您的“名称空间”:

struct

然后初始化实现文件中的值:

extern const struct _FibonacciNumbers
{
    int one;
    int two;
    int three;
    int five;
} FibonacciNumbers;

您现在可以访问常量,例如const struct _FibonacciNumbers FibonacciNumbers = { .one = 1, .two = 2, .three = 3, .five = 5 }; ,其他FibonacciNumbers.one类型可以使用相同的名称,因为每个类型的名称都是私有的。

所以你的第一个选项是“No”,而第二个选择是“Yes”。