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 {