Objective c java中类objC枚举的重新定义

Objective c java中类objC枚举的重新定义,objective-c,enums,Objective C,Enums,在java中,这是可能的: enum VisitSetting { NOT_VISITED, QUERIED_VISITED, CONFIRMED_VISITED } enum ExcludeSetting { NONE, QUERIED_VISITED_AND_CONFIRMED_VISITED, CONFIRMED_VISITED } 请注意,已确认访问的_在VisitSetting中以及ExcludeSetting中 我想在目标c中同时使用一些东西,但随后我得到

在java中,这是可能的:

enum VisitSetting {
  NOT_VISITED,
  QUERIED_VISITED,
  CONFIRMED_VISITED
}

enum ExcludeSetting {
  NONE,
  QUERIED_VISITED_AND_CONFIRMED_VISITED,
  CONFIRMED_VISITED
}
请注意,已确认访问的_在VisitSetting中以及ExcludeSetting中

我想在目标c中同时使用一些东西,但随后我得到了重新定义的枚举器“已确认\u已访问”

这就是实现:

#ifndef RouteApp_IGConstants_h
#define RouteApp_IGConstants_h

typedef enum {
    NOT_VISITED = 0,
    QUERIED_VISITED,
    CONFIRMED_VISITED
} VisitSetting;

typedef enum {
    NONE = 0,
    QUERIED_VISITED_AND_CONFIRMED_VISITED,
    CONFIRMED_VISITED
} ExcludeSetting;



#endif
如何解决这个问题?
我更喜欢不重命名已确认的访问。

您无法更改:/

您通常要做的是用枚举的值作为枚举值的前缀(哦,名称使用驼峰大小写)

所以

你不能。 它是C而不是对象。 在C语言中,枚举只不过是一种方便的方法,可以创建一些整数,并将它们最小地关联起来。 给定的名称是分配给C中整数的名称。 您可以这样做,有效地实现类似的功能,您可以简单地分配一个enum成员来确认所访问的对象,给它们相同的整数值,并允许您在相同的情况下使用它

您会注意到,Cocoa框架倾向于在enum成员名称前面加前缀,这样它们就可以获得伪名称空间和一些上下文清晰度。 Int这种风格你会有两个相同值的整数,但命名如下。。。 访问设置确认您已访问 排除设置确认访问

更常见的样式是全驼峰式

访问设置确认已访问 排除设置确认访问

显然,如果有足够的重叠,将它们合并到一个适当命名的枚举中可能是有意义的


另外,不要错过创建它们的NS_枚举功能。非常方便

在C中,因此在Objective-C中,枚举数位于全局命名空间中。因此,不能在两个枚举中使用相同的枚举数。您必须在Objective-C中重命名至少一个
已确认的
枚举器。我们通常为枚举的每个成员使用一个通用前缀,如下所示:

typedef enum {
    VisitSettingNotVisited = 0,
    VisitSettingQueried,
    VisitSettingConfirmed
} VisitSetting;

typedef enum {
    ExcludeSettingNone = 0,
    ExcludeSettingQueriedAndConfirmed,
    ExcludeSettingConfirmed
} ExcludeSetting;
如果您愿意使用Objective-C++,则可以使用。这是一个新的C++特性,在C.</P>中没有等价性。
enum class VisitSetting {
  NOT_VISITED,
  QUERIED_VISITED,
  CONFIRMED_VISITED
};

enum class ExcludeSetting {
  NONE,
  QUERIED_VISITED_AND_CONFIRMED_VISITED,
  CONFIRMED_VISITED
};

// Example usage:
VisitSetting vs = VisitSetting::CONFIRMED_VISITED;
ExcludeSetting es = ExcludeSetting::CONFIRMED_VISITED;

Xcode 4.6.2支持此C++11功能。旧版本中可能支持它;我不知道。

当我应用您的解决方案时,xcode强制我在枚举名称后加上分号,即
枚举类VisitSetting这使得我的枚举值毫无意义。你知道为什么会这样吗?
enum class VisitSetting {
  NOT_VISITED,
  QUERIED_VISITED,
  CONFIRMED_VISITED
};

enum class ExcludeSetting {
  NONE,
  QUERIED_VISITED_AND_CONFIRMED_VISITED,
  CONFIRMED_VISITED
};

// Example usage:
VisitSetting vs = VisitSetting::CONFIRMED_VISITED;
ExcludeSetting es = ExcludeSetting::CONFIRMED_VISITED;