Objective c java中类objC枚举的重新定义
在java中,这是可能的: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中同时使用一些东西,但随后我得到
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;