Ios 使用扩展扩展扩展多个类

Ios 使用扩展扩展扩展多个类,ios,swift,uitableview,swift-protocols,swift-extensions,Ios,Swift,Uitableview,Swift Protocols,Swift Extensions,我正在使用tableview数据源扩展,如下所示。我想将此扩展应用于我的应用程序中的多个tableview控制器。我看不到任何简单的方法来允许单个泛型扩展扩展多个类,而不将相同的代码复制粘贴到不同的扩展中。可能的解决方案是定义一个协议,然后扩展协议。然而,在这些情况下,他们在协议中定义并随后扩展的函数是自定义函数,而在tableview数据源扩展中,我想应用于许多类,这些函数是标准tableview数据源方法的重写函数。我是否可以使用此模式用此代码扩展多个类,或者是否有其他解决方案 extens

我正在使用tableview数据源扩展,如下所示。我想将此扩展应用于我的应用程序中的多个tableview控制器。我看不到任何简单的方法来允许单个泛型扩展扩展多个类,而不将相同的代码复制粘贴到不同的扩展中。可能的解决方案是定义一个协议,然后扩展协议。然而,在这些情况下,他们在协议中定义并随后扩展的函数是自定义函数,而在tableview数据源扩展中,我想应用于许多类,这些函数是标准tableview数据源方法的重写函数。我是否可以使用此模式用此代码扩展多个类,或者是否有其他解决方案

extension PopularTableViewController
{
    // MARK: UITableViewDataSource

    override func numberOfSections(in tableView: UITableView) -> Int {
        return fetchedResultsController?.sections?.count ?? 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if let sections = fetchedResultsController?.sections, sections.count > 0 {
            return sections[section].numberOfObjects
        } else {
            return 0
        }
    }

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        if let sections = fetchedResultsController?.sections, sections.count > 0 {
            return sections[section].name
        } else {
            return nil
        }
    }

    override func sectionIndexTitles(for tableView: UITableView) -> [String]? {
        return fetchedResultsController?.sectionIndexTitles
    }

    override func tableView(_ tableView: UITableView, sectionForSectionIndexTitle title: String, at index: Int) -> Int {
        return fetchedResultsController?.section(forSectionIndexTitle: title, at: index) ?? 0
    }
}

您可以创建UITableViewController的子类,将扩展添加到子类中,然后让您想要的其他每个表视图控制器继承您创建的子类

如果希望扩展应用于多个类,可以扩展它们的公共超类。“一种可能的解决方案是定义一个协议,然后扩展协议”不,因为Cocoa看不到Swift协议扩展中定义的任何内容。另一种选择是,如果数据源代码相同,不是将这些数据源方法放在视图控制器扩展中,而是为数据源提供一个单独的类。然后,每个希望使用此数据源的表视图控制器都可以实例化一个,并相应地设置表视图的数据源。@mannymoe。当这样指出时,thx非常明显。