在java中这是可能的:
enum VisitSetting {
NOT_VISITED,
QUERIED_VISITED,
CONFIRMED_VISITED
}
enum ExcludeSetting {
NONE,
QUERIED_VISITED_AND_CONFIRMED_VISITED,
CONFIRMED_VISITED
}
请注意,CONFIRMED_VISITED也在ExcSetSetting中的VisitSetting中。
我想在目标c中使用simulair但我得到Redefinition of enumerator 'CONFIRMED_VISITED'
这是实施:
#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
如何解决这个问题? 我希望不重命名CONFIRMED_VISITED。
答案 0 :(得分:11)
在C中,因此在Objective-C中,枚举数位于全局命名空间中。因此,您不能在两个枚举中使用相同的枚举器。您必须在Objective-C中重命名至少一个CONFIRMED_VISITED
枚举器。通常,我们为枚举的每个成员使用公共前缀,如下所示:
typedef enum {
VisitSettingNotVisited = 0,
VisitSettingQueried,
VisitSettingConfirmed
} VisitSetting;
typedef enum {
ExcludeSettingNone = 0,
ExcludeSettingQueriedAndConfirmed,
ExcludeSettingConfirmed
} ExcludeSetting;
如果您愿意使用Objective-C ++ ,则可以使用enum class
。这是一个新的C ++特性,在普通C中没有等效的。
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功能。旧版本可能支持它;我不知道。
答案 1 :(得分:1)
你无法改变:/
你通常做的是在enum值前加上enum的值(哦,你使用驼峰的名字)
所以
typedef enum {
VisitSettingNot = 0,
VisitSettingQueried,
VisitSettingConfirmed
} VisitSetting;
typedef enum {
ExcludeSettingNone = 0,
ExcludeSettingQueriedAndConfirmed,
ExcludeSettingConfirmed
} ExcludeSetting;
答案 2 :(得分:0)
你做不到。 它是C而不是对象。 在C语言中,枚举只不过是一种方便的方式来创建和火热最小化一些整数。 给出的名称是分配给C中的整数的名称。 你可以做到这一点,有效地实现类似的东西,你可以简单地将一个枚举成员分配给CONFIRM_VISITED,给它们相同的整数值,并允许你在相同的情况下使用它。
您会注意到的一件事是Cocoa框架倾向于在枚举成员名称前加上前缀,因此它们会获得伪命名空间和一些上下文清晰度。 在这个样式中,你将有两个具有相同值的整数但是这样命名... VisitSettingCONFIRM_VISITED ExcludeSettingCONFIRM_VISITED
更常见的风格是所有骆驼案例。
VisitSettingConfirmVisited ExcludeSettingConfirmVisited
显然,如果有足够的重叠,将它们合并到一个名称相应的单个枚举中可能是有意义的。
另外,不要错过NS_ENUM工具来创建它们。很方便。