我有一个很大的枚举(为了透明 63 个值),我现在正在基于该枚举创建一个 NS_Options 位标志。有没有办法我可以写这个,以便它灵活?
我对硬编码的主要担忧是:
- 如果我添加/删除一个枚举,我将不得不在我的位标志中手动添加/删除它。
- 有很多打字来生成这些。
- 我的 .h 文件变得非常长(因为我喜欢使用空格和足够的注释)
到目前为止,我提出的唯一解决方案是:
#define FlagForEnum(enum) 1 << enum
typedef NS_ENUM(NSInteger, ExampleEnum)
{
Value1,
Value2,
...
ValueN
}
typedef NS_OPTIONS(NSNumber, ExampleEnumFlags)
{
Value1Flag = FlagForEnum(Value1),
Value2Flag = FlagForEnum(Value2),
...
ValueNFlag = FlagForEnum(ValueN)
}
当我删除一个枚举(至少我得到一个编译错误)时,这是一个勉强足够的解决方案,如果枚举顺序发生了变化,标志的位移位置也会发生变化(并不是真的很重要,但看起来很舒服)。但它并没有解决“这是很多打字”的问题,或者“如果我忘记添加标志会怎样”的问题。