我的问题。我正在使用一个NSEvent,它恰好有一个类型为NSEventModifierFlags.的var modifierFlags
我想检查用户是否按下了修改键(命令),所以基本上我想检查CommandKeyMask是否打开。
在Swift中实现这一点的最佳/正确方法是什么?
发布于 2014-06-13 19:22:26
这是来自较早的Xcode6测试版,现在(Xcode7/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 {
尽管我认为第一个解决方案对读者来说更清晰一些
发布于 2015-08-14 15:17:48
以下代码适用于Xcode7-beta3、Swift 2
在Swift 2中,为了符合OptionSetType
协议,像NSEventModifierFlags
这样的位域样式枚举已经更新。
如果要检查选项集是否包含特定选项,则不再需要使用逐位&
和nil检查。您可以简单地询问选项集是否包含特定值,方法与检查数组是否包含值的方式相同。
if theEvent.modifierFlags.contains(.CommandKeyMask) {
发布于 2014-08-21 15:10:00
Xcode6-Beta6再次改变了这一点我相信,下面的代码现在可以工作了:
if theEvent.modifierFlags & .CommandKeyMask != nil {
https://stackoverflow.com/questions/24202649
复制相似问题