2つのコンポーネントのいずれかがtrueを返す場合にのみtrueを返す条件を設定する方法はありますか?
_BOOL var1
BOOL var2
_
if((var1 && !var2) || (!var1 && var2))
より短いもの
ありがとうございました
Objective-CはCのスーパーセットであるため、CのXOR演算子、つまり^
を使用するだけです。
XOR
if(!!var1 != !!var2)
{
NSLog(@"XOR condition");
}
感嘆符は変数をBOOLに変換します(キャストではなく実際の変換)
したがって、このソリューションは、変数がBOOLでなくても機能します。
!!(0|nil) ≡ 0
!!(any other number|object) ≡ 1
これは、varの1つだけがnonnilであることを確認したい場合に役立ちます。
これを行うことで、Ishuが提案するコードにさらにclearnessを追加できます。
#define XOR !=
そして、あなたはただ書く:
if (var1 XOR var2) {
...
}
真理値表の出力:
[T XOR T => F; T!= T => F]、
[T XOR F => T; T!= F => T]、
[F XOR T => T; F!= T => T]および
[F XOR F => F; F!= F => F]
マクロはオプションである可能性があります。これは同じ動作を維持しますが、より読みやすい方法になりました。
#define XOR(x,y) (((x) && !(y)) || (!(x) && (y)))
if(XOR(var1, var2) {
}
try (int)var1 ^ (int)var2
YESとNOは実際には次のように定義されています。
#define YES (BOOL)1
#define NO (BOOL)0
if ((!var1)==var2)
{
NSLog(@"Yes");
}