2

NSControlTextEditingDelegate プロトコルを実装していますが、commandSelector などと一致させる必要があるクラス/プロトコルがわかりません。#selector(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

        }
//...
}
4

1 に答える 1

2

これを試して:

if (commandSelector == #selector(NSResponder.moveUp) ||

必要に応じて、次のように記述できます。

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

実際、生成されたSelectorインスタンス#selectorにはクラス情報が含まれていません。したがって、同じシグネチャを持つ同じメソッドを定義するクラスを見つけるだけです。


クラスが見つからない場合は、独自のプロトコルで定義し、プロトコル名を使用できます。

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

そしてそれを使用します#selector

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

後者は最後の方法のはずですが、実際には機能します。

于 2016-09-04T12:07:33.333 に答える