我有一个很大的枚举(为了更加透明,它包含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)
}
当我删除枚举时,这是一个勉强能接受的解决方案(至少会得到编译错误)。如果枚举顺序发生变化,标志位移位置也会改变(虽然并不真正重要,但它似乎让人感到安心)。但这并不能解决“这是很多输入”的问题,也不能解决“如果我忘记添加一个标志怎么办”的问题。