mdo*_*ans 16 macos cocoa swift
我的问题.我正在使用NSEvent,它碰巧有一个类型为NSEventModifierFlags的var modifierFlags.
我想检查用户是否按下了修改键(Command),所以基本上我想检查CommandKeyMask是否打开.
在Swift中执行此操作的最佳/正确方法是什么?
小智 24
以下适用于Xcode7-beta3,Swift 2
在Swift 2中,比特字段样式的枚举NSEventModifierFlags已经更新以符合OptionSetType协议.
如果要检查选项集是否包含特定选项,则不再需要使用按位&和零检查.您可以简单地询问选项集是否包含特定值,就像检查数组是否包含值一样.
if theEvent.modifierFlags.contains(.CommandKeyMask) {
Run Code Online (Sandbox Code Playgroud)
这是来自早期的 Xcode 6 beta,现在正确的答案(Xcode 7/Swift 2)是 /sf/answers/2240307891/
以下是可能的:
if (theEvent.modifierFlags & NSEventModifierFlags.CommandKeyMask).value != 0 {
Run Code Online (Sandbox Code Playgroud)
因为有一个&for的定义RawOptionSet
func &<T : RawOptionSet>(a: T, b: T) -> T
Run Code Online (Sandbox Code Playgroud)
但是,请注意RawOptionSet也实现LogicValue,因此以下情况也是可能的:
if theEvent.modifierFlags & NSEventModifierFlags.CommandKeyMask {
Run Code Online (Sandbox Code Playgroud)
虽然我认为第一个解决方案对读者来说更清楚一些
| 归档时间: |
|
| 查看次数: |
3491 次 |
| 最近记录: |