簡體   English   中英

Objective-C用if或in語句乘以相等

[英]Objective-c multiply equality with or in if 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;
}

在第二個示例中,您將執行按位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

使用按位與,您可以進行比較,如下所示:

if ( 00000011 //enumWeekDays
     00000010 //kWeekDayMonday 
    --------- //and
     00000010 ==> kWeekDayMonday!!

| 是按位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...
}

如果有很多比較,后者會很有用,您的當前版本通常在少數情況下更具可讀性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM