Swift: маски как свойства типа
моя проблема. Я работаю с NSEvent, у которого, как правило, есть var modifierFlags типа NSEventModifierFlags.
Я хочу проверить, был ли нажат ключ модификатора (команда), поэтому в основном я хочу проверить, включен ли CommandKeyMask.
Какой лучший/правильный способ сделать это в Swift?
Ответы
Ответ 1
Это от ранней бета-версии Xcode 6, теперь правильный ответ (Xcode 7/Swift 2) fooobar.com/questions/331484/... p >
Возможно следующее:
if (theEvent.modifierFlags & NSEventModifierFlags.CommandKeyMask).value != 0 {
потому что существует определение &
для RawOptionSet
func &<T : RawOptionSet>(a: T, b: T) -> T
Однако обратите внимание, что RawOptionSet
также реализует LogicValue
, поэтому также возможно следующее:
if theEvent.modifierFlags & NSEventModifierFlags.CommandKeyMask {
Хотя я считаю, что первое решение будет более понятным для читателей
Ответ 2
Следующие действия выполняются в Xcode7-beta3, Swift 2
В Swift 2 обновлены стили стиля бит, такие как NSEventModifierFlags
, чтобы соответствовать протоколу OptionSetType
.
Если вы хотите проверить, содержит ли набор опций определенный параметр, вам больше не нужно использовать побитовое &
и проверку nil. Вы можете просто задать опцию, если она содержит определенное значение так же, как вы бы проверяли, содержит ли массив значение.
if theEvent.modifierFlags.contains(.CommandKeyMask) {
Ответ 3
Xcode6-Beta6 изменил это снова, я полагаю, теперь будет работать следующее:
if theEvent.modifierFlags & .CommandKeyMask != nil {