У меня есть три NSViewControllers
, которые соответствуют NSOutlineViewDelegate
, и реализуют те же методы протокола (делегата)
extension MyViewController1: NSOutlineViewDelegate {
func outlineView(_ outlineView: NSOutlineView, didAdd rowView: NSTableRowView, forRow row: Int) {}
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {}
}
extension MyViewController2: NSOutlineViewDelegate {
func outlineView(_ outlineView: NSOutlineView, didAdd rowView: NSTableRowView, forRow row: Int) {}
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {}
}
extension MyViewController3: NSOutlineViewDelegate {
func outlineView(_ outlineView: NSOutlineView, didAdd rowView: NSTableRowView, forRow row: Int) {}
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {}
}
Но все 3 из них имеют одинаковую реализацию для
func outlineView(_ outlineView: NSOutlineView, didAdd rowView: NSTableRowView, forRow row: Int) {}
Таким образом, идея состояла в том, чтобы создать базовый класс BaseViewController
, а затем он также должен соответствовать NSOutlineViewDelegate
extension BaseViewController: NSOutlineViewDelegate {
func outlineView(_ outlineView: NSOutlineView, didAdd rowView: NSTableRowView, forRow row: Int) {}
}
Затем заставить каждый ViewController
наследовать от базы
class MyViewController1: BaseViewController {}
но поскольку каждый ViewController
имеет свою реализацию для другой сигнатуры, -viewFor
, им все равно нужно будет соответствовать NSOutlineViewDelegate
extension MyViewController1: NSOutlineViewDelegate {
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {}
}
extension MyViewController2: NSOutlineViewDelegate {
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {}
}
extension MyViewController3: NSOutlineViewDelegate {
func outlineView(_ outlineView: NSOutlineView, viewFor tableColumn: NSTableColumn?, item: Any) -> NSView? {}
}
Но выполнение этого даетошибка:
Избыточное соответствие 'MyViewController1' протоколу 'NSOutlineViewDelegate'
Есть ли способ сделать то, что я пытаюсь сделать, и сделать компилятор счастливым?