[ios]可以启用警告来比较一个 enum 和非枚举值吗?

标签: ios C Objective-C
发布时间: 2017/3/21 22:59:38
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我最近调试问题造成因为枚举正在与非枚举值进行比较。 这里是一个简化的示例︰

typedef NS_ENUM(NSInteger, MyType) {
    TypeVal1,
};

...

MyType type = TypeVal1;
int randomValue = 0;

BOOL compareTypeAndPrimiative = (randomValue == typeA); // No warning

它是可能为此打开警告吗?

我能抑制如果需要通过显式强制转换︰

BOOL iKnowWhatImDoing = (randomValue == (int) typeA);

解决方法 1:

不支持此类警告因为有 C 枚举不强类型的而我相信的标准要求他们待作为 int (或无符号的整数)。与常规整数比较他们的成员,我们总是获准作为 C 标准的一部分,这种类型的警告最终会标记正确的代码很多。我敢肯定有人可以链接到 C 标准的适当部分。

特别是与 iOS 苹果 Api,你会发现,枚举值通常用作位掩码。在这些情况下是共同编写这样的代码︰

if ((value & flag) == kFlag) { ... }

你可以认为为此目的使用枚举是一个好主意,但你可能会最终不得不禁用此警告为各种各样的代码。

官方微信
官方QQ群
31647020