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

use*_*746 20 c enums cocoa-touch objective-c

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

这样的事情:我们有enum类型

  typedef enum {  
    UIModalTransitionStyleCoverVertical = 0,  
    UIModalTransitionStyleFlipHorizontal,
    UIModalTransitionStyleCrossDissolve,
    UIModalTransitionStylePartialCurl,
 } UIModalTransitionStyle;  
Run Code Online (Sandbox Code Playgroud)

现在我想添加或添加到此集合中的项目UIModalTransitionStyleCoverVerticalFlipped.可以完成这样的事情吗?

epo*_*och 16

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

extern const UIModalTransitionStyle UIModalTransitionStyleCoverVerticalFlipped;
Run Code Online (Sandbox Code Playgroud)

实施文件:

const UIModalTransitionStyle UIModalTransitionStyleCoverVerticalFlipped = 10;
Run Code Online (Sandbox Code Playgroud)

确保在框架扩展时给出一些空间,这样就不会产生冲突.这有点像黑客,但它将摆脱编译器错误和警告.


Jer*_*fin 8

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

typedef enum {  
    UIModalTransitionStyleCoverVertical = 0,  
    UIModalTransitionStyleFlipHorizontal,
    UIModalTransitionStyleCrossDissolve,
    UIModalTransitionStylePartialCurl,
    UIModalTransitionStyleCoverVerticalFlipped
} UIModalTransitionStyle;
Run Code Online (Sandbox Code Playgroud)

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

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

typedef enum { 
    UIModalTransitionStyleCoverVerticalFlipped =
        UIModalTransitionStylePartialCurl + 1
} ExtendedUIModalTransitionStyle;
Run Code Online (Sandbox Code Playgroud)

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