Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 带有多个OR语句的Objective-C IF语句_Ios_Objective C_If Statement - Fatal编程技术网

Ios 带有多个OR语句的Objective-C IF语句

Ios 带有多个OR语句的Objective-C IF语句,ios,objective-c,if-statement,Ios,Objective C,If Statement,我想知道是否有一种更简单的方法可以将多个OR语句作为单个if语句的一部分来执行 目前我正在这样做: if ((i == 1) || (i == 4) || (i == 7)) {} 有更简单的方法吗?您可以使用带直通功能的开关块 switch (i) { case 1: case 4: case 7: yourCode; break; } 您可以使用NSArray的containsObject:方法,如下所示:

我想知道是否有一种更简单的方法可以将多个OR语句作为单个if语句的一部分来执行

目前我正在这样做:

            if ((i == 1) || (i == 4) || (i == 7)) {}

有更简单的方法吗?

您可以使用带直通功能的
开关

switch (i)
{
    case 1:
    case 4:
    case 7:
        yourCode;
        break;
}

您可以使用
NSArray
containsObject:
方法,如下所示:

if ([@[@1, @4, @7] containsObject:@(i)]) {
    ...
}
NSArray *expect = @[@1, @4, @7];
...
if ([expect containsObject:@(i)]) {
    ...
}
这种方法的有用性随着列表的长度而提高:有三项,您的解决方案看起来更好,但一旦您超过大约十个数字的限制,此解决方案的可读性就会越来越高:

if ([@[@1, @3, @12, @17, @23, @27, @31, @41, @43, @57] containsObject:@(i)]) {
    ...
}
您可以为预期常量列表
@[@1,@4,@7]
创建一个命名数组,以缩短
(如果
),如下所示:

if ([@[@1, @4, @7] containsObject:@(i)]) {
    ...
}
NSArray *expect = @[@1, @4, @7];
...
if ([expect containsObject:@(i)]) {
    ...
}

但这与OR不同,它更像是在相同的情况下使用其他几种条件,因为
开关在达到有效条件时不会停止(除非使用
中断
)。但是如果在arm汇编代码中查找,我相信会损失相当多的cpu周期。可以使用新的
@(I)
而不是
[NSNumber numberwhithint:i]
@Lefteris除非这是一个非常紧密的循环,否则现在几百个周期在这里和那里没有什么区别:毕竟,我们谈论的是时钟周期为千兆赫兹的CPU。但OP提出的解决方案不太清楚。别这样!这没什么错,目前的两个答案不太清楚。肯特·贝克:“尽可能做最简单的事情”——肯特·贝克