swift 如何从ViewController类继承函数

kmbjn2e3  于 2022-10-31  发布在  Swift
关注(0)|答案(3)|浏览(214)

我尝试从HomeViewController类继承一个函数reloadTableView()。该函数用于重新加载tableView。
这是声明了reload函数的HomeViewController。

class HomeViewController: UIViewController {

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

        }

    } 
}

我想从另一个UIViewController类调用此reload函数。有人能帮助我如何继承和使用此函数吗

dxpyg8gm

dxpyg8gm1#

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

42fyovps

42fyovps2#

看起来tableView并没有特别归属于HomeViewController。因此,将TableView类直接添加到ViewController可能是一个解决方案。但是,如果您还想使用HomeViewController中的函数,则在没有看到HomeViewControllerTableView的使用的情况下,此方法可能不起作用。
类似这样的方法可以奏效:

class OtherViewController: UIViewController {
    var tableView = TableView()

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

mefy6pfw3#

使用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()

希望这能满足您的需要。如果是,请不要忘记将其标记为正确答案。😄

相关问题