使用扩展来扩展多个类

时间:2017-08-15 22:37:51

标签: ios swift uitableview swift-protocols swift-extensions

我正在使用tableview数据源扩展,如下所示。我想将此扩展应用于我的应用程序中的多个tableview控制器。我无法看到任何简单的方法来允许单个通用扩展扩展多个类而无需复制和放大。将相同的代码粘贴到不同的单独扩展中。可能的解决方案是定义protocol,然后扩展协议。在这些情况下,它们在协议中定义然后扩展的函数是自定义函数而在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
    }
}

1 个答案:

答案 0 :(得分:1)

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