viewDidLoad/setup上的iOS协议函数调用

viewDidLoad/setup上的iOS协议函数调用,ios,swift,Ios,Swift,我正在尝试创建一个可以在UIViewControllers上使用的协议,当协议连接到UIViewControllers时,该协议将执行一些设置工作。我目前有以下代码 protocol MyProtocol { } extension MyProtocol where Self: UIViewController { func setup() { print("We have successfully setup this view controller") }

我正在尝试创建一个可以在UIViewControllers上使用的协议,当协议连接到UIViewControllers时,该协议将执行一些设置工作。我目前有以下代码

protocol MyProtocol {
}

extension MyProtocol where Self: UIViewController {
    func setup() {
        print("We have successfully setup this view controller")
    }
}

class MyViewController: UIViewController, MyProtocol {
    override func viewDidLoad() {
        super.viewDidLoad()
        print("Other setup work here") // This line might or might not exist
        setup() // Goal is to remove this line, so I don't forget to add it across all my view controllers
    }
}
我的问题是,有没有办法从
viewDidLoad
函数中删除
setup()
调用?我认为不必每次都调用该函数会安全得多。如果有一个视图控制器忘记添加一个调用,那么安装就不会发生,我想尝试阻止它

它所连接的视图控制器上的
viewDidLoad
函数可能会执行其他工作(例如,在本例中
print(“此处的其他设置工作”)
),或者除了该
设置
调用之外,它可能不会执行任何操作

我也不完全反对将
setup
函数调用移动到视图生命周期内的一个单独函数中,但是视图生命周期中被调用的其他函数也可能有其他需要运行的东西,所以我不想完全覆盖它们


我也考虑过以某种方式使用
init
方法,但我认为问题是视图还没有加载,因此我无法进行适当的设置工作,如更改标签文本等。

为此,您应该旋转
viewDidLoad
,或者创建一个基类,如下面的wizzle
viewDidLoad
?你这是什么意思?看看,我被你的问题弄糊涂了。协议没有任何作用,只是承诺。协议在这个问题中扮演什么角色?另外,如果
setup()
方法至关重要,并且需要存在于每个视图控制器中,那么只需将其添加到每个视图控制器中即可。如果你害怕忘记添加它,我想当你确实忘记时,你会得到某种错误,这会提醒你添加它。每个视图控制器都需要很多东西,不要忘记添加这些东西,不要让它们有所不同?简短回答:您可能希望探索视图控制器的子类化。