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



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

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

这将引发编译错误,因为ONETWOTHREEFIVE在两个enum s中都重复。

有没有办法做到这一点(不更改文字的名称或添加前缀或后缀)?

有没有办法让我使用文字的代码看起来像这样:int num = NumbersEnum.SIX;而不是int num = SIX;

否。这是C语言和Objective-C语言的一部分。你不会改变它,也没有人会为你改变它。

不能使用enum s执行此操作;它们的成员是全局的,并且名称必须是唯一的。然而,有一种巧妙的技术可以用来为structs的常量创建伪名称空间。

在适当的标题中声明您的"命名空间":

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,其他struct类型可以使用相同的名称,因为这些名称对每个类型都是私有的。

因此,第一个选项是"否",第二个选项则是"是"。

最新更新