Swift:掩码作为类型属性

时间:2014-06-13 09:59:11

标签: macos cocoa swift

我的问题。我正在使用NSEvent,它碰巧有 NSEventModifierFlags 类型的var modifierFlags

我想检查用户是否按下了修改键(Command),所以基本上我想检查是否 CommandKeyMask

在Swift中执行此操作的最佳/正确方法是什么?

3 个答案:

答案 0 :(得分:24)

以下适用于Xcode7-beta3,Swift 2

在Swift 2中,像NSEventModifierFlags这样的位字段样式枚举已更新,以符合OptionSetType协议。

如果要检查选项集是否包含特定选项,则不再需要使用按位&和零检查。您可以简单地询问选项集是否包含特定值,就像检查数组是否包含值一样。

if theEvent.modifierFlags.contains(.CommandKeyMask) {

答案 1 :(得分:20)

Xcode6-Beta6再次改变了这一点我相信,现在可以使用以下内容:

if theEvent.modifierFlags & .CommandKeyMask != nil {

答案 2 :(得分:2)

这是来自早期的Xcode 6测试版,现在正确答案(Xcode 7 / Swift 2) https://stackoverflow.com/a/32004398/669586


以下是可能的:

if (theEvent.modifierFlags & NSEventModifierFlags.CommandKeyMask).value != 0 {

因为&

RawOptionSet的定义
func &<T : RawOptionSet>(a: T, b: T) -> T

但是,请注意RawOptionSet也会实现LogicValue,因此以下内容也是可能的:

if theEvent.modifierFlags & NSEventModifierFlags.CommandKeyMask {

虽然我认为第一个解决方案对读者来说更清楚