如何在swift 2.2中更新NSResponder选择器

如何在swift 2.2中更新NSResponder选择器,swift,selector,nsresponder,Swift,Selector,Nsresponder,我正在实现一个NSControlTextEditingDelegate协议,我不知道应该与哪个类/协议匹配,例如commandSelector#选择器(WhichClass.moveUp(:)),以便相等项将通过 目前,使用swift 2.1一切正常: func control(control: NSControl, textView: NSTextView, doCommandBySelector commandSelector: Selector) -> Bool { var

我正在实现一个NSControlTextEditingDelegate协议,我不知道应该与哪个类/协议匹配,例如commandSelector#选择器(WhichClass.moveUp(:)),以便相等项将通过

目前,使用swift 2.1一切正常:

func control(control: NSControl, textView: NSTextView, doCommandBySelector commandSelector: Selector) -> Bool {

    var goUp = false
    var goDown = false

        if (commandSelector == Selector("moveUp:") ||
        commandSelector == Selector("moveBackward:") ||
        commandSelector == Selector("moveUpAndModifySelection:") ||
        commandSelector == Selector("moveParagraphBackwardAndModifySelection:")
            )

        {
            goUp = true
        }
        if (commandSelector == Selector("moveDown:") ||
        commandSelector == Selector("moveForward:") ||
        commandSelector == Selector("moveDownAndModifySelection:") ||
        commandSelector == Selector("moveParagraphForwardAndModifySelection:")
            ) {
            goDown = true

        }
//...
}
试试这个:

if (commandSelector == #selector(NSResponder.moveUp) ||
如果您愿意,可以按以下方式编写:

if (commandSelector == #selector(NSResponder.moveUp(_:)) ||
实际上,从
#Selector
生成的
选择器
实例不包含类信息。因此,您只需找到任何定义具有相同签名的相同方法的类


如果找不到任何类,可以在自己的协议中定义它并使用协议名称

@objc protocol MyProtocol {
    func moveUp(_:AnyObject)
    //...
}
并在选择器中使用它:

if (commandSelector == #selector(MyProtocol.moveUp(_:)) ||


后者应该是最后一种方法,但它确实有效。

谢谢您的回答。所以不必担心是否相等?@MarekH,您可以轻松地检查它,
#选择器(MyProtocol.moveUp(:)==#选择器(NSResponder.moveUp)
返回true。当两个选择器的Objective-C表示法(如“moveUp:”)相等时,这两个选择器相等。别担心。