如何在IF子句中获取现有变量的值?

时间:2015-01-04 03:12:28

标签: objective-c c

我正在研究Objective C,我想做这样的事情:

if (a && !b) {
  // a do something...
} else if (!a && b) {
  // b do something...
}

我想知道是否有更简单的东西,比如:

if (a XOR b) {
  // the existing variable do something...
}

提前致谢!!

3 个答案:

答案 0 :(得分:2)

Objective C是C的超集,使用^运算符。或者你可以逻辑思考(因为xor只有在两者都为真且另一个为假的情况下才为真)并使用:

// This won't work for all types, be careful
if (a != b){
    if (a){
        // a do something
    }   
    if (b){
        // b do something
    }
}

请注意,从xor扩展的此解决方案比您提供的解决方案更长。

答案 1 :(得分:1)

好吧,我不确定我是否误解了,但我想可能的解决办法是使用?操作

void *aux;
if( aux = a ? (b ? NULL : a) : (b ?  b : NULL) )
    //working with aux here

从来没有,如果想要保持简单,这是非常难以理解的。此外,这将扩展为:

void *aux;
if(a){
    if(b)
         aux = NULL;
    else
         aux = a;
}else{
    if(b)
         aux = b;
    else
         aux = NULL;
}

我的建议是你保持原样。它更具可读性和性能,我不相信你会注意到这些方法之间的差异

为清晰起见编辑:
顺便说一下,在if块中,aux var将包含存在的值。如果aux为NULL,则不输入if块。此外,aux不必是void *或指针,它只需要与a和b数据类型兼容。

答案 2 :(得分:0)

if( !a != !b ) // same as a xor b