当使用 NSEvent flagsChanged 并使用各种 KeyMask 对标志进行 AND 运算时,您如何以独家方式测试它们?目前,在模式中使用一系列 if else 条件:
if ((flags & someKeyMask) && (flags someOtherKeyMask))
即使第三个修饰键被按下,这也会匹配。在 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 }
这给出了排他匹配。