Objective-c与if语句或在if语句中相乘

时间:2013-08-02 12:47:33

标签: objective-c if-statement switch-statement

我真的不明白这两者有什么区别:

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;
}

2 个答案:

答案 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...
}

如果有很多比较,后者可能很有用,您的当前版本通常在少数情况下更具可读性。