2014-10-16 43 views
1

这段代码似乎完全合乎逻辑。为什么我得到“开关条件具有布尔值”错误?我使用它来切换UIButton上的文字。它的工作原理,但我仍然有错误。开关条件有布尔值吗?

bool buttonSunStatus = TRUE; 

- (void) useButtonSun:(id)sender 
{ 
    buttonSun = [UIButton buttonWithType: UIButtonTypeCustom]; 
    switch (buttonSunStatus) { 
     case TRUE: 
      [sender setTitle:@"No Sun" forState:UIControlStateNormal]; 
      buttonSunStatus = FALSE; 
      break; 
     case FALSE: 
      [sender setTitle:@"Sun" forState:UIControlStateNormal]; 
      buttonSunStatus = TRUE; 
      break; 
    } 
} 
+0

也许是暗示,在一个布尔值的情况下,if..then..else ..可能是解决方案更好 – deau 2014-10-16 18:35:43

+4

如果你在'YES'和'NO'中使用'BOOL'而不是''TRUE'和'FALSE'时使用'BOOL',你会得到错误吗?当然,在这种情况下,使用简单的“if/else”语句和“bool”值的简单切换比使用“switch”语句更容易读取和写入。 – rmaddy 2014-10-16 18:42:59

+0

将类型更改为BOOL和YES/NO可消除此错误。道歉 - 我以为在发布这个问题之前我曾尝试过。非常感谢。 – 2014-10-22 08:37:35

回答

5

该警告只是告诉您,您正在使用带有布尔值的switch语句。对于真正的布尔值,您应该只使用if - else语句,而不是switch

请注意,如果您使用true布尔类型,则只会出现此警告。如果您在Mac OS或非64位iOS上使用BOOL,那是unsigned char。因此你不会为这些目标得到这个警告。但是,如果您使用bool(或者如果您在64位iOS目标上使用BOOL),则会收到此警告。

您可以用if - else语句替换switch语句来禁止此警告。

1

我建议你用一个简单的if/else在这种情况下,由于是:

if (buttonstatus){ 
// TRUE code 
} 
else{ 
// FALSE code 
}