【问题标题】:Different Objective-C enums with the same literals具有相同文字的不同 Objective-C 枚举
【发布时间】:2014-08-26 16:51:50
【问题描述】:

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

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

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

有没有办法让这项工作保持原样(不更改文字名称或添加前缀或后缀)?

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

【问题讨论】:

  • 枚举定义了名称集,但您似乎希望将枚举用作容器。 Objective-C 和 Foundation 框架提供了一组丰富的真实容器——为什么不试试呢?

标签: objective-c enums


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    enums 不能这样做;它们的成员是全局的,并且名称必须是唯一的。但是,您可以使用一种巧妙的技术来处理make pseudo-namespaces for constantsstructs。

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

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

    所以你的第一个选项是“否”,但第二个选项是“是”。

    【讨论】:

    • 不过,您给出的精确示例——这两组数字——最好用简单的数组来实现。
    • 这个例子只是为了澄清我的问题,如果它是在真实的代码中我同意你的评论 100% 它绝对应该是数组:)
    • 这就是我的想法,以及为什么我只在评论而不是答案中发表该评论。
    猜你喜欢
    • 2019-11-12
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    相关资源
    最近更新 更多