检查keyDown event.modifierFlags会产生错误

Chr*_*ris 4 macos cocoa swift

我继承了NSTextView并重写了keyDown.我想检测命令键组合.例如,Command-L.

Apple的文档表明你只是修饰符标志(在传递的NSEvent中)与NSEventModifierFlags.CommandKeyMask.

当我这样做时:

let ck = NSEventModifierFlags.CommandKeyMask
Run Code Online (Sandbox Code Playgroud)

我收到一个奇怪的错误:

Binary operator '&' cannot be applied to two 'NSEventModifierFlags' operands.
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?这是swift 2.0,xcode 7.

谢谢!

Dar*_*ren 12

Apple的文档表明你只是修饰符标志

文档仍然指C和Objective-C.Swift使用OptionSetType,它不使用按位运算符来检查标志.

相反,使用该contains()方法检查一个或多个标志:

    if theEvent.modifierFlags.contains(.CommandKeyMask) {
        NSLog("command key down")
    }

    if theEvent.modifierFlags.contains(.AlternateKeyMask) {
        NSLog("option key down")
    }

    if theEvent.modifierFlags.contains([.CommandKeyMask, .AlternateKeyMask]) {
        NSLog("command and option keys down")
    }
Run Code Online (Sandbox Code Playgroud)

要检查单个密钥,请使用intersect过滤掉任何不需要的标记,然后使用==检查单个标记:

    let modifierkeys = theEvent.modifierFlags.intersect(.DeviceIndependentModifierFlagsMask)

    if modifierkeys == .CommandKeyMask {
        NSLog("Only command key down")
    }
Run Code Online (Sandbox Code Playgroud)