我正在实现一个NSControlTextEditingDelegate协议,我不知道应该与哪个类/协议相匹配,例如commandSelector。#selector(WhichClass.moveUp(_:)),以便传递等式。
目前,所有事情都很好,使用的是迅速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
}
//...
}发布于 2016-09-04 12:07:33
试试这个:
if (commandSelector == #selector(NSResponder.moveUp) ||如果您愿意,可以按以下方式编写它:
if (commandSelector == #selector(NSResponder.moveUp(_:)) ||实际上,从Selector生成的#selector实例不包含类信息。因此,您只需要找到定义相同方法的任何类都具有相同的签名。
如果找不到任何类,则可以在自己的协议中定义类并使用协议名。
@objc protocol MyProtocol {
func moveUp(_:AnyObject)
//...
}并在#selector中使用
if (commandSelector == #selector(MyProtocol.moveUp(_:)) ||后者应该是最后一条路,但实际上是可行的。
https://stackoverflow.com/questions/39316601
复制相似问题