gpt4 book ai didi

swift - 如何在 swift 2.2 中更新 NSResponder 选择器

转载 作者:可可西里 更新时间:2023-11-01 01:31:09 31 4
gpt4 key购买 nike

我正在实现一个 NSControlTextEditingDelegate 协议(protocol),但我不知道我应该匹配哪个类/协议(protocol),例如命令选择器。 #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

}
//...
}

最佳答案

试试这个:

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

如果你愿意,你可以这样写:

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

实际上,从#selector 生成的Selector 实例不包含类信息。因此,您只需找到定义具有相同签名的相同方法的任何类。


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

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

并在#selector中使用它:

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

后者应该是最后一种方式,但确实有效。

关于swift - 如何在 swift 2.2 中更新 NSResponder 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39316601/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com