逻辑和按位运算符警告混淆 - iOS

时间:2012-10-11 22:03:20

标签: ios if-statement operators bit-manipulation

我有一个if else语句并且在那里有2个完全正确的参数,但是第二个如果给我这个警告:

  

使用逻辑'&&'使用常量操作数

使用的代码是:

else if ( !IS_WIDESCREEN && UIInterfaceOrientationPortrait) //No Warning or error
{

}
else if(IS_WIDESCREEN && UIInterfaceOrientationLandscapeRight) //Gives me the above warning
{

}

注意:IS_WIDESCREEN - 使用iPhone 5屏幕的测量值定义。

知道为什么这是??

///编辑:

添加了我定义iPhone 5的方式

#define IS_WIDESCREEN ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )

整个过程都在这个方法中:

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfa‌​ceOrientation duration:(NSTimeInterval)duration

2 个答案:

答案 0 :(得分:1)

我认为应该是

else if ( !IS_WIDESCREEN && (interfaceOrientation == UIInterfaceOrientationPortrait)) {  
// ....
} else if(IS_WIDESCREEN && (interfaceOrientation == UIInterfaceOrientationLandscapeRight)) {  
// ....
} 

如果您在shouldAutoRotateToInterfaceOrientation内使用此内容,因为您将常量值与IS_WIDESCREEN进行比较

答案 1 :(得分:1)

如果在逻辑&&表达式中使用常量,则会收到警告,因为常量不相关。想象一下,常数是非负的。 if (x && non-neg-constant)的结果与if (x)相同。同样,如果常量为零,if (x && 0)永远不会成立。

因此,编译器会警告您,并暗示可能您正在尝试执行按位操作,检查特定位以查看它是否已设置。