可以将另一个项添加到现有的枚举类型中吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可以将另一个项添加到现有的枚举类型中吗?相关的知识,希望对你有一定的参考价值。
我想知道是否可以在现有的枚举类型(框架的一部分)中添加/追加另一个项目?
像这样:我们有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时,感觉很奇怪。
要做到这一点,你必须更新枚举声明,以包括UIModalTransitionStyleCoverVerticalFlipped
这个值
typedef enum {
UIModalTransitionStyleCoverVertical = 0,
UIModalTransitionStyleFlipHorizontal,
UIModalTransitionStyleCrossDissolve,
UIModalTransitionStylePartialCurl,
UIModalTransitionStyleCoverVerticalFlipped
} UIModalTransitionStyle;
所以UIModalTransitionStyleCoverVerticalFlipped
将等于整数常数4
无论你使用Enum dec中的任何字符串常量。相应的常数值被替换,因此在上述情况下,它被用来约束变量只保留指定的一组值(即0到4)
以上是关于可以将另一个项添加到现有的枚举类型中吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Angular 4 添加到现有的 node.js 应用程序