[英]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.