【问题标题】:Usage of enum name as value identifier in Objective-C在 Objective-C 中使用枚举名称作为值标识符
【发布时间】:2015-08-06 05:26:48
【问题描述】:

参考this post,似乎在Objective-C中不可能定义两个与本例中具有相同值的enums:

enum AnEnum {
  AnyValue
};

enum AnotherEnum {
  AnyValue // Error: Redefinition of enumerator 'AnyValue'
};

我想了解为什么有机会为enums 设置名称但显然没有任何可能使用它(例如在Java 中通过AnotherEnum.AnyValue 调用值)。

【问题讨论】:

  • 您设置名称并且可以使用它,您不能做的是限定您的使用范围,但范围是 Obj-C 中的一个更广泛的问题,并且有一些约定可以解决这个问题跨度>
  • 是的,对不起,我的帖子有点太笼统了......所以你可以例如定义 enum 类型的变量(这也会导致上下文敏感的代码支持),但我我缺少两个方面。
  • 1) 我想了解为什么上述限制存在于 Objective-c 中的背景和 2) 最常见的解决方法是什么。
  • 有一个技巧可以让struct 像命名空间enum 一样工作,Mike Ash 在他的博客中展示了这一点:mikeash.com/pyblog/…
  • @JoshCaswell 酷指针!

标签: objective-c enums namespaces declaration redefinition


【解决方案1】:

Objective-C 是 C。enum 是 C 枚举。并且没有命名空间。这正是约定将枚举命名为 AnEnumAnyValue 和 AnotherEnumAnyValue 的原因。你会发现所有的 Cocoa 枚举都是这样工作的:

typedef enum {
   UIViewAnimationTransitionNone,
   UIViewAnimationTransitionFlipFromLeft,
   UIViewAnimationTransitionFlipFromRight,
   UIViewAnimationTransitionCurlUp,
   UIViewAnimationTransitionCurlDown,
} UIViewAnimationTransition;

如果您想要 Java 等范围枚举名称,请切换到 Swift。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2010-12-12
    • 2010-12-10
    • 1970-01-01
    相关资源
    最近更新 更多