为"If"语句设置多个整数测试值

10
我想在单个变量的if语句中设置多个整数测试。由于逻辑运算符必须是布尔值,所以逻辑运算符无法使用。
例如:
if self.nodeAtPoint(location) == self.fake {
    groundspeed = 35.0
    self.button1value++

    if(button1value == 2) {
      groundspeed = 5.0
    }

    if(button1value == 4){
        groundspeed = 5.0
    }

    if(button1value == 6) {
        groundspeed = 5.0
    }
}

目标是把所有显示的偶数都放进一个if语句中。

3个回答

21

如果我们只想检查button1value是否为偶数,可以使用取模(%)运算符:

if button1value % 2 == 0 {
    // button1value is even
    groundspeed = 5.0
}

如果我们要检查其他类型的集合,可以使用 switch 语句:

switch button1value {
    case 2,4,6:
        // button1value is 2, 4, or 6
        groundspeed = 5.0
    default:
        // button1value is something else
}

如果需要,我们可以使用Swift的switch语句来执行其他巧妙的技巧:

switch (button1value % 2, button1value % 3) {
    case (0,0):
        // button1value is an even multiple of 3 (6,12,18...)
    case (0,_):
        // button1value is an even number not a multiple of three (2,4,8,10,14...)
    case (_,0):
        // button1value is an odd multiple of three (3,9,15,21...)
    default:
        // button1value is none of the above: (1,5,7,11...)
}

6

请查看并采用nhgrif的答案,以获得更好的变体。但是为了完整起见,如果您想保留自己的方式,可以使用逻辑或运算符||

if(button1value == 2 || button1value == 4 || button1value == 6) {
    groundspeed = 5.0
}

检查给定的布尔值中是否有任何一个为true。

还有一个逻辑AND运算符&&


5
您可以使用contains来检查多个值。只需将包含要测试的值和变量的数组作为第二个参数传递即可:
if contains([2, 4, 6], button1value) {
    groundspeed = 5.0
}

1
这种方法的效率与使用“if-else”或“switch”语句相比如何呢?(尽管如此,我仍会点赞,因为在某些情况下使用“contains()”是有必要的。) - nhgrif
是的,它会变慢,但除非您执行数千次,否则您不太可能注意到。 - vacawama
(或者在数组中有更多的元素。OP想要“所有偶数”记住。) - nhgrif
“所有显示的偶数”仅指2、4和6。如果OP真的意味着“所有偶数”,那么你的“% 2”绝对是最好的解决方案。实际上,即使只有几个数字,如果所有期望的数字都是偶数,而其他所有数字都是奇数,我也会选择这个方案。 - vacawama

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接