Пробовал ниже код, не компилируетПроверка битовая в Swift
if button.keyEquivalentModifierMask & NSEventModifierFlags.CommandKeyMask != 0 {
}
Что такое правильный способ проверить битмаски в Swift?
Пробовал ниже код, не компилируетПроверка битовая в Swift
if button.keyEquivalentModifierMask & NSEventModifierFlags.CommandKeyMask != 0 {
}
Что такое правильный способ проверить битмаски в Swift?
keyEquivalentModifierMask
является Int
, в то время как NSEventModifierFlags.CommandKeyMask
является перечисление типа с UInt
необработанного значения, так что вы должны прочитать rawValue
из него и конвертировать keyEquivalentModifierMask
в Uint
:
if UInt(button.keyEquivalentModifierMask) & NSEventModifierFlags.CommandKeyMask.rawValue > 0 {
}
OMG код длиннее, чем его эквивалент objc. Не заметил, что 'keyEquivalentModifierMask' является' Int', в то время как 'NSEventModifierFlags' имеет значение' UInt' raw. Какой дизайн API! – Ethan
Это остается незамеченным, пока язык обеспечивает неявное преобразование ... в swift вместо этого все должно быть явно преобразовано – Antonio
Вы должны подать отчет об ошибке. Должно быть возможно улучшить преобразование этих типов и методов в Swift. –
У меня нет достаточно указывает, чтобы оставить комментарий, но @Greg Parker, в Swift 2 есть более аккуратный способ. NSEventModifierFlags - это перечисление OptionSetType. Флаги можно проверить с помощью метода contains(). Так что-то вроде ...
NSEvent.modifierFlags().contains(.ShiftKeyMask)
... works. Не самый короткий код, но более аккуратный.
(если кто-нибудь может дать мне несколько моментов, я мог бы прокомментировать следующий раз!)
что вы получите сообщение об ошибке? – holex