如何在swift 2.2中更新NSResponder selector



我正在实现一个NSControlTextEditingDelegate协议,我不知道我应该匹配哪个类/协议,例如commandSelector。#selector(whereclass . 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生成的Selector实例不包含类信息。因此,您只需找到定义具有相同签名的相同方法的任何类。


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

@objc protocol MyProtocol {
    func moveUp(_:AnyObject)
    //...
}

并在#selector中使用:

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

后一种方法应该是最后一种方法,但它实际上是有效的

相关内容

  • 没有找到相关文章

最新更新