2014-11-17 4 views
0

Пробовал ниже код, не компилируетПроверка битовая в Swift

if button.keyEquivalentModifierMask & NSEventModifierFlags.CommandKeyMask != 0 { 
} 

Что такое правильный способ проверить битмаски в Swift?

+0

что вы получите сообщение об ошибке? – holex

ответ

1

keyEquivalentModifierMask является Int, в то время как NSEventModifierFlags.CommandKeyMask является перечисление типа с UInt необработанного значения, так что вы должны прочитать rawValue из него и конвертировать keyEquivalentModifierMask в Uint:

if UInt(button.keyEquivalentModifierMask) & NSEventModifierFlags.CommandKeyMask.rawValue > 0 { 
} 
+0

OMG код длиннее, чем его эквивалент objc. Не заметил, что 'keyEquivalentModifierMask' является' Int', в то время как 'NSEventModifierFlags' имеет значение' UInt' raw. Какой дизайн API! – Ethan

+0

Это остается незамеченным, пока язык обеспечивает неявное преобразование ... в swift вместо этого все должно быть явно преобразовано – Antonio

+0

Вы должны подать отчет об ошибке. Должно быть возможно улучшить преобразование этих типов и методов в Swift. –

3

У меня нет достаточно указывает, чтобы оставить комментарий, но @Greg Parker, в Swift 2 есть более аккуратный способ. NSEventModifierFlags - это перечисление OptionSetType. Флаги можно проверить с помощью метода contains(). Так что-то вроде ...

NSEvent.modifierFlags().contains(.ShiftKeyMask) 

... works. Не самый короткий код, но более аккуратный.

(если кто-нибудь может дать мне несколько моментов, я мог бы прокомментировать следующий раз!)

Смежные вопросы