我真的不明白这两者有什么区别:
If (self.someEnum == someEnumValue1 || self.someEnum == someEnumValue2)
{
// Do some stuff
}
和
If (self.someEnum == (someEnumValue1 | someEnumValue2) )
{
// Do some stuff
}
第二个显然不起作用,但它没有给出任何警告或错误,但我不知道它是什么。
我觉得它像这个开关一样工作:
switch (self.someEnum){
case someEnumValue1:
case someEnumValue2:
{
// Do some stuff
}
break;
default: break;
}
答案 0 :(得分:2)
在第二个示例中,您正在执行按位OR
,然后将结果与self.someEnum
进行比较。
这在使用bitFlags时很有用(即)你可以存储具有不同组合可能性的值,如上所述:
enumWeekDays = kWeekDaySunday | kWeekDayMonday;
if (enumWeekDays & kWeekDayTursday == kWeekDayTursday ) ... //will not enter here
if (enumWeekDays & kWeekDayMonday == kWeekDayMonday ) ... //will enter here
只是为了澄清:
kWeekDaySunday = 1 ==> 00000001
kWeekDayMonday = 2 ==> 00000010
enumWeekDays = 00000001 OR 00000010 ==> 00000011
使用按位AND,您可以比较,如下所示:
if ( 00000011 //enumWeekDays
00000010 //kWeekDayMonday
--------- //and
00000010 ==> kWeekDayMonday!!
答案 1 :(得分:1)
|
是一个按位OR
运算符,所以你的行;
if (self.someEnum == (someEnumValue1 | someEnumValue2) )
其中someEnumValue1 = 5且someEnumValue2 = 2最终会出现;
if (self.someEnum == (5 | 2) )
与
相同if (self.someEnum == 7 )
...如果someEnum是5或2中的一个也不匹配。
基本上有两种方法可以做你想做的事情,或者像你一样单独进行比较,或者使用switch/case
;
switch(self.someEnum) {
case 5:
case 2:
...do your stuff if 5 or 2...
break;
default:
...and here you do your stuff if they're not...
}
如果有很多比较,后者可能很有用,您的当前版本通常在少数情况下更具可读性。