Ios 带有多个OR语句的Objective-C IF语句
我想知道是否有一种更简单的方法可以将多个OR语句作为单个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:方法,如下所示:
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提出的解决方案不太清楚。别这样!这没什么错,目前的两个答案不太清楚。肯特·贝克:“尽可能做最简单的事情”——肯特·贝克