我的问题。我正在使用NSEvent,它碰巧有 NSEventModifierFlags 类型的var modifierFlags 。
我想检查用户是否按下了修改键(Command),所以基本上我想检查是否 CommandKeyMask 。
在Swift中执行此操作的最佳/正确方法是什么?
答案 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 {
虽然我认为第一个解决方案对读者来说更清楚