Ios 警告:使用NS_枚举类型时,整数到指针的转换不兼容
我使用的是枚举,类似于这样:Ios 警告:使用NS_枚举类型时,整数到指针的转换不兼容,ios,objective-c,enums,Ios,Objective C,Enums,我使用的是枚举,类似于这样: typedef NS_ENUM(NSInteger, MyURLType) { MyURLType1, MyURLType2, MyURLType3 }; 尝试比较或识别类型时出现问题: if (type == MyURLType2) 如果出现MyUrlType2和MyUrlType3(而不是MyURLType1),我将收到一个警告“不兼容的整数到指针转换”)。我在声明中有没有做错什么?有什么想法吗 谢谢 根据您的评论 是的,我正在使用M
typedef NS_ENUM(NSInteger, MyURLType) {
MyURLType1,
MyURLType2,
MyURLType3
};
尝试比较或识别类型时出现问题:
if (type == MyURLType2)
如果出现MyUrlType2
和MyUrlType3
(而不是MyURLType1
),我将收到一个警告“不兼容的整数到指针转换”
)。我在声明中有没有做错什么?有什么想法吗
谢谢 根据您的评论
是的,我正在使用MyURLType*type=MyURLTypeX 那么
类型
不是类型MyURLType
,而是类型指向MyURLType的指针
if (type == MyURLType2)
这里比较的是指针类型(type
)和整数类型(MyURLType
)。如果整数类型为0
,则不会生成警告,因为它可能是对NULL
的检查
您需要将
type
声明为简单的MyURLType
(MyURLType-type=…
)或在比较时取消引用type
(if(*type==MyURLType2)
)。刚刚在研究这个问题,但另一个选项似乎是强制转换枚举:
如果(type==(MyURLType*)MyURLType2)
为什么不将type定义为int?然后,您可以比较整数。简单清洁的解决方案
int type = MyURLTypeX;
将允许您这样做
if(type==MyURLType2)
因为它们都是int
怎么可能还没有人提出这一点呢?这里的类型是什么?整数?或者MyURLType的变量?是MyURLType的变量显示
类型的声明
您可以使用*像MyURLType*类型是的,我正在使用MyURLType*类型=MyUrlTypeX就是这样!非常感谢。根据您的编译器设置,您可能会收到一条警告,将int与MyURLType或int与NSInteger进行比较,因此在这种情况下,您的建议是错误的。事实上,如果你没有打开这个警告,我会推荐它。你应该一直说你的意思。将其声明为MyURLType-type=MyURLTypeX
并在以后保存。如果您将所有枚举值声明为int,那么有一天您将比较两个完全不同的枚举,您将花费很长时间来找出哪里出了问题。