可以将另一个项添加到现有的枚举类型中吗?

我想知道是否可以在现有的枚举类型(框架的一部分)中添加/追加另一个项目?

像这样:我们有enum类型

  typedef enum { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, UIModalTransitionStylePartialCurl, } UIModalTransitionStyle; 

现在我想追加或添加一个项目,如UIModalTransitionStyleCoverVerticalFlipped 。 可以完成这样的事情吗?

您可以强制新元素与枚举具有相同的类型,但不能在子类中扩展它。 头文件:

 extern const UIModalTransitionStyle UIModalTransitionStyleCoverVerticalFlipped; 

实施文件:

 const UIModalTransitionStyle UIModalTransitionStyleCoverVerticalFlipped = 10; 

确保在框架扩展的情况下提供一些空间,这样您就不会有冲突。 这有点像黑客,但它将摆脱编译器错误和警告。

为此,您必须修改原始类型定义以包含新值:

 typedef enum { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, UIModalTransitionStylePartialCurl, UIModalTransitionStyleCoverVerticalFlipped } UIModalTransitionStyle; 

否则,您可以抓住机会不工作,并单独定义:

 typedef enum { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, UIModalTransitionStylePartialCurl, } UIModalTransitionStyle; typedef enum { UIModalTransitionStyleCoverVerticalFlipped = UIModalTransitionStylePartialCurl + 1 } ExtendedUIModalTransitionStyle; 

一个可以保存原始枚举的变量在/当你分配新值时通常也可以完美地工作(在典型的情况下,它只是一个int ) – 但是不能保证。 至少在理论上,实现可以/可以分配足够的位以保持该枚举,即以这种方式添加更多值将不起作用。 它也可以进行范围检查,因此不允许分配任何超出范围的值。 这些都不常见,所以从实际的角度来看,它可能不是问题 – 但从理论的角度来看,没有什么能真正保证像这样的代码能够起作用。

也许这可以帮助你:

 typedef NS_ENUM(NSInteger, BaseType) { BaseTypeCase1, BaseTypeCase2, BaseTypeSize }; typedef NS_ENUM(NSInteger, SubType) { SubTypeCase1 = BaseTypeSize, SubTypeCase2 }; 

现在您可以在知道值是唯一的情况下打开SubType。

如果您无权访问BaseType,则可以将SubTypeCase1设置为BaseType的最后一项+ 1。

不足之处在于,您无法声明采用SubType并将其传递给BaseType而不会收到编译器警告的方法。 所以你需要声明你的方法来采取NSIntegers,以便沉默警告。 此外,当您需要声明SubType的参数并且能够传入BaseType时,感觉很奇怪。

为此,您必须更新Enum声明以包含UIModalTransitionStyleCoverVerticalFlipped此值

 typedef enum { UIModalTransitionStyleCoverVertical = 0, UIModalTransitionStyleFlipHorizontal, UIModalTransitionStyleCrossDissolve, UIModalTransitionStylePartialCurl, UIModalTransitionStyleCoverVerticalFlipped } UIModalTransitionStyle; 

所以UIModalTransitionStyleCoverVerticalFlipped将等效于整数常量4

无论你使用Enum dec中的任何字符串常量。 相应的常量值被替换,因此在上述情况下,它用于约束变量仅保留指定的一组值(即0到4)