警告:使用NS_ENUM类型时,不兼容的整数到指针转换

时间:2013-08-30 07:54:16

标签: ios objective-c enums

我正在使用枚举,类似这样:

typedef NS_ENUM(NSInteger, MyURLType) {
    MyURLType1,
    MyURLType2,
    MyURLType3
};

当我尝试比较或识别类型时出现问题:

if (type == MyURLType2)

对于"Incompatible integer to pointer conversion"MyUrlType2,我收到MyUrlType3警告(不是MyURLType1)。我在宣言中做错了吗?有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:6)

来自您的评论

  

是的,我使用的是MyURLType * type = MyURLTypeX

然后type不属于MyURLType类型,属于pointer to MyURLType类型。

if (type == MyURLType2)

在这里,您将指针类型(type)与整数类型(MyURLType)进行比较。如果整数类型为0,则不会生成警告,因为它可能是对NULL的检查。

比较(type)时,您需要将MyURLType声明为简单MyURLType type =…type)或取消引用if (*type == MyURLType2)

答案 1 :(得分:0)

为什么不将类型定义为int?然后,您可以比较整数。简单干净的解决方案。

int type = MyURLTypeX; 

允许你这样做

if (type == MyURLType2)因为它们都是完整的。

怎么可能没有人提出这个呢?

答案 2 :(得分:-1)

只是研究这个,但看起来另一个选择是施放枚举:

if (type == (MyURLType *) MyURLType2)