【问题标题】:switch condition has boolean value?开关条件有布尔值?
【发布时间】:2014-12-12 05:42:46
【问题描述】:

这段代码看起来非常合乎逻辑。为什么我收到“开关条件具有布尔值”错误?我用它来切换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;
    }
}

【问题讨论】:

  • 也许它暗示在布尔值的情况下 if..then..else.. 可能是更好的解决方案?
  • 如果您将BOOLYESNO 一起使用而不是boolTRUEFALSE 一起使用,您会收到错误吗?当然,在这种情况下,一个简单的 if/else 语句和一个简单的 bool 值切换比使用 switch 语句更容易读写。
  • 将类型更改为 BOOL 和 YES/NO 可消除此错误。道歉 - 我以为我在发布这个问题之前已经尝试过了。非常感谢。

标签: objective-c boolean switch-statement


【解决方案1】:

你应该使用BOOL,而不是bool

【讨论】:

    【解决方案2】:

    我建议您在这种情况下使用简单的 if/else,如下所示:

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

    【讨论】:

      【解决方案3】:

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

      注意,只有在使用真正的布尔类型时才会收到此警告。如果您使用 BOOL,则在 Mac OS 或非 64 位 iOS 上是 unsigned char。因此,对于这些目标,您不会收到此警告。但是如果你使用bool(或者如果你在64位iOS目标上使用BOOL),你会收到这个警告。

      您可以将switch 语句替换为if-else 语句以抑制此警告。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-15
        • 2020-08-14
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-06
        • 1970-01-01
        相关资源
        最近更新 更多