Swift 如何向NSTableViewDelegate协议添加方法?

Swift 如何向NSTableViewDelegate协议添加方法?,swift,cocoa,delegates,nstableview,swift-protocols,Swift,Cocoa,Delegates,Nstableview,Swift Protocols,我想用一些自定义方法扩展NSTableViewDelegate协议。例如,我希望我的自定义NSTableView子类通知代理一些特定事件。是否可以不创建另一个协议,而是向现有协议添加自定义方法?这里最好的方法是什么 我尝试编写并扩展到NSTableViewDelegate,并调用了方法,但在此扩展中,我无法访问delegate类(我的NSViewController子类)。这有点破坏了整个想法,因为控制器需要以其特定的方式响应事件 那么:如何向NSTableViewDelegate协议添加方法并

我想用一些自定义方法扩展
NSTableViewDelegate
协议。例如,我希望我的自定义
NSTableView
子类通知代理一些特定事件。是否可以不创建另一个协议,而是向现有协议添加自定义方法?这里最好的方法是什么


我尝试编写并扩展到
NSTableViewDelegate
,并调用了方法,但在此扩展中,我无法访问delegate类(我的
NSViewController
子类)。这有点破坏了整个想法,因为控制器需要以其特定的方式响应事件


那么:如何向
NSTableViewDelegate
协议添加方法并在delegate类中提供实现呢

抱歉说得太多:)

示例代码(在项目中略有不同,但想法相同):


isTableViewFirstResponder
是委托类的属性。
斯威夫特就是不知道去哪里找。如何指定声明
isTableViewFirstResponder
的类?

您正在扩展
NSTableViewDelegate
协议,因此只能看到
NSTableViewDelegate
实现中存在的内容
isTableViewFirstResponder
不存在于
NSTableViewDelegate
s实现中,因此扩展不知道

好吧,不可能将存储属性添加到扩展中,因此我认为您必须引入额外的Protcol,这在我看来也是有意义的。因为这不是委托人的职责,而是响应者的职责:

protocol NSTableViewResponder {
    var isTableViewFirstResponder: Bool {get set}
}

extension NSTableViewResponder {
    mutating func didBecomeFirstResponder(_ tableView: NSTableView) {
        isTableViewFirstResponder = true
    }

    mutating func didResignFirstResponder(_ tableView: NSTableView) {
        isTableViewFirstResponder = false
    }
}

可以向该协议添加方法。但是实现将驻留在扩展中,没有明显的方法在符合协议的类中实现其他方法。

但是在这个扩展中,我无法访问委托类
-您能解释一下吗?您希望如何访问它?如果您添加代码会更好。感谢您对该问题的关注。添加了一个代码段。
NSTableViewDelegate
不了解
isTableViewFirstResponder
。我认为您想扩展NSTableView而不是委托。@Shallowthough,是的,这是我的观点:
NSTableViewDelegate
不知道
isTableViewFirstResponder
。请您稍微解释一下您的想法好吗?
isTableViewFirstResponder
是委托类的属性。My table view子类通过问题中描述的两种方法通知其委托人获取/退出first responder状态,委托人必须将状态存储在其属性isTableViewFirstResponder中。我只想在delegate类中实现这两个方法,就像所有常规的
NSTableViewDelegate
方法一样。我找不到
isTableViewFirstResponder
。当然,因为它是委托的自定义属性(例如,
MyViewController
)。啊。它是符合委托协议的类的属性。我会更新答案。是的,这实际上是我在提问之前实施的。这当然有效。我对所有这些面向协议的东西都是新手,我认为有一种方法可以在不创建新方法的情况下向协议添加方法。非常感谢。
protocol NSTableViewResponder {
    var isTableViewFirstResponder: Bool {get set}
}

extension NSTableViewResponder {
    mutating func didBecomeFirstResponder(_ tableView: NSTableView) {
        isTableViewFirstResponder = true
    }

    mutating func didResignFirstResponder(_ tableView: NSTableView) {
        isTableViewFirstResponder = false
    }
}