XOR目标-c

Nic*_*ini 22 iphone logic objective-c

有没有办法把条件只有当两个组件中的一个返回true时返回true?

BOOL var1
BOOL var2
Run Code Online (Sandbox Code Playgroud)

短于的东西 if((var1 && !var2) || (!var1 && var2))

谢谢

Cyr*_*lle 53

由于Objective-C是C的超集,因此您只需使用C中的XOR运算符即可^.

  • 这是按位XOR,如果你想要一个逻辑XOR,只需使用`!=`. (22认同)
  • 这两种解决方案都不会一直有效.BOOL可以是任何整数.如果两个值都不为零,则两者都将失败,但不相等.最强大的选择可能是完全写出来,就像原始问题一样. (2认同)
  • @DrewMcCormack,为避免此问题,您可以使用两个感叹号将任何类型转换为真实的“ BOOL”。!! var1!= !! var2` (2认同)

Ish*_*shu 45

XOR

if(!!var1 != !!var2)
{
   NSLog(@"XOR condition");
}
Run Code Online (Sandbox Code Playgroud)

感叹号将变量转换为BOOL(实际转换,而不是转换)
因此,即使您的变量不是BOOL,此解决方案仍然有效.

!!(0|nil) ? 0  
!!(any other number|object) ? 1
Run Code Online (Sandbox Code Playgroud)

当您想要确保只有一个变量是非零时,这非常有用.