【问题标题】:"if-else" with multiple OR / Objective-C带有多个 OR / Objective-C 的“if-else”
【发布时间】:2012-12-31 00:15:52
【问题描述】:

我有一个问题,但我无法找到答案。 有什么办法可以减少Objective-C中的以下表达式?

if ((r != 1) && (r != 5) && (r != 7) && (r != 12)) {
   // The condition is satisfied
}else{
   // The condition isn't satisfied
}

例如(不工作):

if (r != (1 || 5 || 7 || 12)) {
   // The condition is satisfied
}else{
   // The condition isn't satisfied
}

谢谢!

【问题讨论】:

  • 你可以去掉一些括号。
  • 这将是一个更长的表达式,但您可以创建一个包含 1、5、7 和 12 的整数数组,并检查它是否包含 r。更多代码,但更易于维护。
  • 尝试阅读德摩根法律。
  • 如果您可以控制要比较的值,也可以将其设为掩码,然后使用按位运算来检查值。

标签: objective-c if-statement operators conditional


【解决方案1】:

你可以使用NSSet,像这样:

NSSet *prohibited = [NSSet setWithArray:@[@1, @5, @7, @12]];
if (![prohibited containsObject:[NSNumber numberWithInt:r]]) {
    // The condition is satisfied
} else {
    // The condition isn't satisfied
}

如果一组数字包含一组固定的数字,例如在您的示例中,您可以将NSSet *prohobited 设为静态变量,并对其进行一次初始化,而不是像我上面的示例中那样每次都进行。

【讨论】:

  • 既然你已经在使用现代语法,你也可以使用@(r)创建NSNumber
【解决方案2】:

您也可以使用switch 来点赞

switch (r)
{
    case 1:
    case 5:
    case 7:
    case 12:
        // r is having 1,5,7 or 12
        break;
    default:
        // r is having other values
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-13
    相关资源
    最近更新 更多