有没有一种方法可以设置条件,仅在两个组件中的一个返回true时才返回true?
BOOL var1
BOOL var2
比if((var1 && !var2) || (!var1 && var2))
更短的某些东西
谢谢
BOOL var1
BOOL var2
比if((var1 && !var2) || (!var1 && var2))
更短的某些东西
谢谢
由于Objective-C是C的超集,因此您可以直接使用C中的异或运算符,即^
。
!=
。 - Gabriele PetronellaBOOL
。 !!var1!= !!var2
- DanSkeelXOR
if(!!var1 != !!var2)
{
NSLog(@"XOR condition");
}
感叹号将变量转换为BOOL类型(真实转换,而不是强制类型转换)。
因此,即使您的变量不是BOOL类型,这种解决方案也可以正常工作。
!!(0|nil) ≡ 0
!!(any other number|object) ≡ 1
在某些情况下,当你想要确保仅有一个变量非空时,这将会很有用。
#define XOR !=
if (var1 XOR var2) {
...
}
真值表输出:
[T 异或 T => F; T 不等于 T => F],
[T 异或 F => T; T 不等于 F => T],
[F 异或 T => T; F 不等于 T => T] 和
[F 异或 F => F; F 不等于 F => F]
宏定义可能是一个选项。在更易读的方式下,它将保持相同的行为。
#define XOR(x,y) (((x) && !(y)) || (!(x) && (y)))
if(XOR(var1, var2) {
}
if ((!var1)==var2)
{
NSLog(@"Yes");
}
尝试 (int)var1 ^ (int)var2
实际上以下面方式定义的 YES 和 NO:
#define YES (BOOL)1
#define NO (BOOL)0