При использовании флагов NSEventChanged и ANDing флаги с различными KeyMasks, как вы можете протестировать их эксклюзивным способом? В настоящее время, используя ряд, если в другом месте условия йот шаблон:Как вы можете захватывать только ключи-модификаторы?
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 Томасами является: flags &= (<one or more masks bitwise OR'd together);
if (flags == (<one or more masks bitwise OR'd together)) { // do something }
Это дает исключительное согласование.
Да, это не проблема. Проблема в том, что если if ((flags & (NSShiftKeyMask | NSControlKeyMask)) предшествует этому в серии if-else, он совпадает даже с той же последовательностью клавиш-модификаторов. – uchuugaka
Вы должны только проверить, какие именно комбинации вы хотите. Если у вас действительно есть два условия, которые не являются взаимоисключающими, тогда вы должны решить, как вы хотите справиться с этим (делайте то и другое, делайте только A, делайте только B, не делайте ни того) и, соответственно, напишите свой код. Возможно, я не понимаю что-то, но это звучит как старая шутка: «Доктор, когда я так двигаю рукой, это больно». «Ну, тогда не делай этого». Иными словами: все ваши условия должны быть в форме Я показал и не написал ни одной формы, которую вы написали. –
Я обновил свой ответ с расширенным примером, аналогичным тому, что было в вашем вопросе (хотя ваш вопрос имеет избыточный случай). –