【问题标题】:How to inherit function from a ViewController class如何从 ViewController 类继承函数
【发布时间】:2022-11-09 21:10:24
【问题描述】:

我正在尝试从类HomeViewController 继承一个函数reloadTableView()。该函数仅用于重新加载 tableView。

这是声明了 reload 函数的 HomeViewController。

class HomeViewController: UIViewController {

    
    func reloadTableView(){
        DispatchQueue.main.async {
            self.tableView.reloadData()
            
  
            
        }
        
    } 
}

我想从另一个 UIViewController 类调用这个重载函数。谁能帮助我如何继承和使用此功能

【问题讨论】:

  • 哪里“另一个 UIViewController 类”?你 push 把它放到导航控制器堆栈上了吗?你present了吗?

标签: swift function uitableview inheritance


【解决方案1】:

我不确定你是否真的需要在这里继承,但如果你愿意,你可以这样做:class AnotherViewController: HomeViewController。现在您可以在本课程中使用您的reloadTableView()

【讨论】:

  • 我的另一个班级是这样声明的class AssignPageViewController: UIViewController。如果我像class AssignPageViewController: UIViewController, HomeViewController 这样添加 HomeViewController,则会引发以下错误。 “从类 'UIViewController' 和 'HomeViewController' 的多重继承”
  • 如果继承自 HomeViewController,则不需要添加 UIViewController,因为 HomeViewController 继承自 UIViewController。你可以在这里阅读更多关于继承的信息:docs.swift.org/swift-book/LanguageGuide/Inheritance.html
【解决方案2】:

看起来tableView 并没有特别归属于HomeViewController。因此,将 TableView 类直接添加到ViewController 可能是一种解决方案。但是,如果没有看到 HomeViewControllerTableView 的用法,如果您还想使用 HomeViewController 中的函数,这可能不起作用。

像这样的东西可以工作:

class OtherViewController: UIViewController {
    var tableView = TableView()

    func reloadTableView(){
        DispatchQueue.main.async {
            self.tableView.reloadData()
        }
    } 
}

【讨论】:

    【解决方案3】:

    使用Protocol Extension 是满足您需求的最佳选择。

    检查下面的示例代码

    import UIKit
    
    protocol TableProtocols {
        func reloadTableView()
    }
    
    extension TableProtocols {
        
        //implement your common code here
        func reloadTableView() {
            print("Called: (#function)")
        }
    }
    
    class SomeViewController1: UIViewController, TableProtocols {
        
        func someFunction() {
            //just call that `reloadTableView` method
            reloadTableView()
        }
    }
    
    class SomeViewController2: UIViewController, TableProtocols {
        
        func someFunction() {
            //just call that `reloadTableView` method
            reloadTableView()
        }
    }
    
    let viewController1 = SomeViewController1()
    viewController1.someFunction()
    
    let viewController2 = SomeViewController2()
    viewController2.someFunction()
    

    希望这能满足您的需求。如果是的话,别忘了把它标记为正确答案。?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      相关资源
      最近更新 更多