如何向 NSTableViewDelegate 协议添加方法?
How to add methods to NSTableViewDelegate protocol?
我想用一些自定义方法扩展 NSTableViewDelegate
协议。例如,我希望我的自定义 NSTableView
subclass 通知代理某些特定事件。是否可以不创建另一个协议而是向现有协议添加自定义方法?这里最好的方法是什么?
我尝试编写和扩展 NSTableViewDelegate
,方法被调用,但在这个扩展中我无法访问委托 class(我的子 class NSViewController
)。这有点破坏了整个想法,因为控制器需要以其特定方式响应事件。
那么:如何向 NSTableViewDelegate
协议添加方法并在委托中提供实现 class?
抱歉冗长:)
示例代码(在项目中略有不同,但思路是一样的):
extension NSTableViewDelegate {
func didBecomeFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = true //warning: Use of unresolved identifier 'isTableViewFirstResponder'
}
func didResignFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = false //warning: Use of unresolved identifier 'isTableViewFirstResponder'
}
}
isTableViewFirstResponder
是代表 class 的 属性。
Swift 就是不知道去哪里找。如何在声明 isTableViewFirstResponder
的地方指定 class?
您正在扩展 NSTableViewDelegate
协议,因此只能看到 NSTableViewDelegate
实现中存在的内容。 isTableViewFirstResponder
在 NSTableViewDelegate
的实现中不存在,因此扩展不知道。
Afaik 不可能将存储的 属性 添加到扩展中,因此我认为您必须引入一个额外的 Protcol,这在我看来也是有意义的。因为它不是代表责任,而是响应者责任:
protocol NSTableViewResponder {
var isTableViewFirstResponder: Bool {get set}
}
extension NSTableViewResponder {
mutating func didBecomeFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = true
}
mutating func didResignFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = false
}
}
可以向该协议添加方法。但是实现将驻留在扩展中,没有明显的方法来实现符合协议的 class 中的其他方法。
我想用一些自定义方法扩展 NSTableViewDelegate
协议。例如,我希望我的自定义 NSTableView
subclass 通知代理某些特定事件。是否可以不创建另一个协议而是向现有协议添加自定义方法?这里最好的方法是什么?
我尝试编写和扩展 NSTableViewDelegate
,方法被调用,但在这个扩展中我无法访问委托 class(我的子 class NSViewController
)。这有点破坏了整个想法,因为控制器需要以其特定方式响应事件。
那么:如何向 NSTableViewDelegate
协议添加方法并在委托中提供实现 class?
抱歉冗长:)
示例代码(在项目中略有不同,但思路是一样的):
extension NSTableViewDelegate {
func didBecomeFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = true //warning: Use of unresolved identifier 'isTableViewFirstResponder'
}
func didResignFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = false //warning: Use of unresolved identifier 'isTableViewFirstResponder'
}
}
isTableViewFirstResponder
是代表 class 的 属性。
Swift 就是不知道去哪里找。如何在声明 isTableViewFirstResponder
的地方指定 class?
您正在扩展 NSTableViewDelegate
协议,因此只能看到 NSTableViewDelegate
实现中存在的内容。 isTableViewFirstResponder
在 NSTableViewDelegate
的实现中不存在,因此扩展不知道。
Afaik 不可能将存储的 属性 添加到扩展中,因此我认为您必须引入一个额外的 Protcol,这在我看来也是有意义的。因为它不是代表责任,而是响应者责任:
protocol NSTableViewResponder {
var isTableViewFirstResponder: Bool {get set}
}
extension NSTableViewResponder {
mutating func didBecomeFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = true
}
mutating func didResignFirstResponder(_ tableView: NSTableView) {
isTableViewFirstResponder = false
}
}
可以向该协议添加方法。但是实现将驻留在扩展中,没有明显的方法来实现符合协议的 class 中的其他方法。