gpt4 book ai didi

ios - NS_OPTIONS 位掩码自动生成

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:23 24 4
gpt4 key购买 nike

我有一个很大的枚举(为了透明起见,有 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)
}

当我删除一个枚举(至少我得到一个编译错误)时,这是一个勉强足够的解决方案,如果枚举顺序改变,标志的移位位置也会改变(这并不重要,但看起来令人欣慰).但它并没有解决“这是很多类型的输入”问题,也没有解决“如果我忘记添加标志怎么办”的问题。

最佳答案

您可以使用一种称为 X Macro 的技术

#define VALUES \
VALUE_LINE(Value1) \
VALUE_LINE(Value2) \
VALUE_LINE(Value3)

typedef NS_ENUM(NSUInteger, ExampleEnum)
{
#define VALUE_LINE(x) x,
VALUES
#undef VALUE_LINE
}

typedef NS_OPTIONS(NSUInteger, ExampleEnumFlags)
{
#define VALUE_LINE(x) x##Flag = 1 << x,
VALUES
#undef VALUE_LINE
}

关于ios - NS_OPTIONS 位掩码自动生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17176272/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com