Как обновить NSResponder селектор в Swift 2.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
}
//...
}
1 ответ
Решение
Попробуй это:
if (commandSelector == #selector(NSResponder.moveUp) ||
Вы можете написать это следующим образом, если вы предпочитаете:
if (commandSelector == #selector(NSResponder.moveUp(_:)) ||
На самом деле, генерируется Selector
экземпляр из #selector
не содержит информацию о классе. Итак, вы просто найдете любой класс, определяющий один и тот же метод с той же сигнатурой.
И если вы не можете найти какой-либо класс, вы можете определить его в своем собственном протоколе и использовать имя протокола.
@objc protocol MyProtocol {
func moveUp(_:AnyObject)
//...
}
И использовать его в #selector
:
if (commandSelector == #selector(MyProtocol.moveUp(_:)) ||
Последний должен быть последним способом, но на самом деле он работает.