我正在实现一个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(_:)) ||
后一种方法应该是最后一种方法,但它实际上是有效的