2017-08-15 94 views
0

我使用的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 
    } 
} 
+0

如果你想擴展應用到多個類,您可以擴展它們的共同超類。 – matt

+1

「一個可能的解決方案是定義一個協議而不是,然後擴展該協議」否它不是,因爲可可不能看到以迅速協議擴展定義任何東西。 – matt

+1

另一種選擇,如果數據源代碼是相同的,是爲了不把在視圖控制器擴展這些數據源的方法,而是具有用於數據源一個單獨的類。然後,每個希望使用此數據源的表視圖控制器都可以實例化一個表並相應地設置表視圖的數據源。 – Rob

回答

1

您可以的UITableViewController的子類,擴展添加到您的子類,然後讓你想從你所做的子類繼承所有其他表視圖控制器。