4

我试图缩短我的代码,从:

if(i== x || i == y || i == z )

if (i == ( x || y || z ))

我知道这种方式是错误的,因为我在日志中得到了不正确的 i。

但是,有什么方法可以缩短 Objective-C 中的代码吗?

4

6 回答 6

9

您可以使用一个switch语句,但这并不能真正为您带来 2-3 个值。

switch (i) {
    case x:
    case y:
    case z:
        ....some code....
        break
    default:
        ....some other code....
}

如果你检查的东西更复杂或者你有更多的选择,那就更省钱了。

于 2013-02-17T09:47:59.970 回答
8

如果有更高的概率,x==i那么y==i最好写它x==i || y==i而不是y==i || x==i因为如果第一个语句的计算结果为真,则第二个语句不会被计算(它是短路的)

于 2013-02-17T09:47:26.820 回答
5

如果你想检查很多你可以使用的对象NSArrayindexOf方法:

    NSArray *matchingNumbers = @[@1,@2,@3,@4,@5,@6,@7,@8];
    NSNumber *checkedNumber = @3;
    if ( [matchingNumbers indexOfObject:checkedNumber] != NSNotFound)
    {
        //...
    }
于 2013-02-17T09:49:48.887 回答
3

计算机处理数字信号。计算机的所有自然运算都是二进制的。

如果你想比较三个东西,你必须使用两个二进制比较来使它对计算机更好。

您还需要意识到更短的代码不一定更快。通常,这只是作者的一个捷径概念。

那么为什么你认为你需要进一步缩短这个表达式呢?

于 2013-02-17T09:48:13.917 回答
3

至于您比较 50 个值的问题。

制作一个由这 50 个变量组成的 NSMutableArray……然后使用此代码。

使用此代码:

if ([myArray containsObject:i]) {

奇迹般有效!


如果要分别检查每个值,可以使用 while 循环或 for 循环:

n = 0;
while (n<49) {
    if (n==[myArray objectAtIndex:n]) {
        //OR statement returned true for one of the 50 objects... 
    }
}





以下部分适用于需要对此问题有不同答案的其他人:



如果我们有其余的代码,可能有办法缩短你的整个条件语句......至于缩短“或”部分,我不确定如何......

但是像:

if ((i==x)||(i==y)) {
     string=@"hello";
}

可能变成:

string = ((i==x)||(i==y)) ? @"hello";





或者......类似的东西:

if ((i==x)||(i==y)) {
     string=@"hello";
} else {
     string=@"goodbye";
}

可能变成:

string = ((i==x)||(i==y)) ? @"hello" : @"goodbye";





因为我经常使用带有数值的条件语句,所以我经常使用快捷方式,如果条件语句为真,则等于 1,而如果条件语句为假,则等于 0,因此我可以这样说

myNumber = ((i==x)||(i==y))*(z+w);

如果 i 等于 x 或 y,它将返回 true(即“1”),这将返回 1*(z+w) 或 (z+w),但如果条件为 false,则返回“0”,即返回 0* (z+w) 或 0。





最后说明:*可能有数学方法来表示一个函数帽子返回你想要的结果......例如,如果 x = -2 和 y = 2 而不是检查 i==x 或 i==y 只是检查如果 abs(i) == y (*abs 是绝对值)

于 2013-02-17T14:02:54.053 回答
0

如果您使用大量变量,则可以执行以下操作:)

if ([[[NSMutableArray alloc] initWithObjects:x,y,z,a,b,c,d,e,f,g,h,j,k,l,nil] containsObject:i]) {
于 2014-07-30T19:12:35.000 回答