首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Swift:作为类型属性的掩码

Swift:作为类型属性的掩码
EN

Stack Overflow用户
提问于 2014-06-13 17:59:11
回答 3查看 3.6K关注 0票数 16

我的问题。我正在使用一个NSEvent,它恰好有一个类型为NSEventModifierFlags.的var modifierFlags

我想检查用户是否按下了修改键(命令),所以基本上我想检查CommandKeyMask是否打开。

在Swift中实现这一点的最佳/正确方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-13 19:22:26

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

以下情况是可能的:

代码语言:javascript
复制
if (theEvent.modifierFlags & NSEventModifierFlags.CommandKeyMask).value != 0 {

因为有用于RawOptionSet&的定义

代码语言:javascript
复制
func &<T : RawOptionSet>(a: T, b: T) -> T

但是,请注意,RawOptionSet也实现了LogicValue,因此以下情况也是可能的:

代码语言:javascript
复制
if theEvent.modifierFlags & NSEventModifierFlags.CommandKeyMask {

尽管我认为第一个解决方案对读者来说更清晰一些

票数 2
EN

Stack Overflow用户

发布于 2015-08-14 15:17:48

以下代码适用于Xcode7-beta3、Swift 2

在Swift 2中,为了符合OptionSetType协议,像NSEventModifierFlags这样的位域样式枚举已经更新。

如果要检查选项集是否包含特定选项,则不再需要使用逐位&和nil检查。您可以简单地询问选项集是否包含特定值,方法与检查数组是否包含值的方式相同。

代码语言:javascript
复制
if theEvent.modifierFlags.contains(.CommandKeyMask) {
票数 24
EN

Stack Overflow用户

发布于 2014-08-21 15:10:00

Xcode6-Beta6再次改变了这一点我相信,下面的代码现在可以工作了:

if theEvent.modifierFlags & .CommandKeyMask != nil {

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24202649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档