NSEvent flagsChanged を使用し、さまざまな KeyMask でフラグを AND 演算する場合、どうすればそれらを排他的な方法でテストできますか? 現在、次のパターンの一連の if else 条件を使用しています。
if ((flags & someKeyMask) && (flags someOtherKeyMask))
これは、3 番目の修飾キーが押されていても一致します。より長い一連のキー マスクを if else 条件文の前に置くと、動作は期待どおりに機能しますが、どういうわけか不完全に感じられます。「他の修飾キーではなく、これらの修飾キーのみ」と言うのは良い方法ですか?
これは、最初のものが他のものより前に一致する、より具体的な例です。「これらの修飾キーのみ」というロジックをそれぞれに追加する方法があるかどうか疑問に思っています。
if ((flags & (NSCommandKeyMask|NSControlKeyMask))) {
NSLog(@"one");
}else if (((flags & NSCommandKeyMask) && (flags & NSAlternateKeyMask)) && (flags & NSControlKeyMask)) {
NSLog(@"Command+Option+Control ");
} else if ((flags & NSCommandKeyMask) && (flags & NSShiftKeyMask)) {
NSLog(@"Command+Shift ");
} else if ((flags & NSCommandKeyMask) && (flags & NSControlKeyMask)) {
NSLog(@"Command+Control");
} else if ((flags & NSCommandKeyMask) && (flags & NSAlternateKeyMask)) {
NSLog(@"Command+Option ");
}
Ken Thomases が提供する、私が探していた正しいパターンは次のとおりです。
flags &= (<one or more masks bitwise OR'd together);
if (flags == (<one or more masks bitwise OR'd together)) { // do something }
これにより、排他的なマッチングが得られます。