我正在尝试创建一个可以在UIViewControllers上使用的协议,当该协议附加到UIViewControler上时,它将进行一些设置工作。我目前有以下代码。
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
}
}
我的问题是,有没有办法从setup()
函数中删除viewDidLoad
调用?我认为不必每次都调用该函数会更安全。如果有一个视图控制器忘记添加该调用,那么设置将不会发生,我想尝试防止这种情况。
附加在视图控制器上的viewDidLoad
函数有可能完成其他工作(例如,在本示例中为print("Other setup work here")
),或者有可能不会除了该setup
调用之外,什么也不做。
我也不完全反对将setup
函数调用移到视图生命周期中的单独函数中,但是同样,视图生命周期中被调用的其他函数可能还需要执行其他操作运行得很好,所以我不想完全覆盖它们。
我还考虑过以某种方式使用init
方法,但是我认为问题在于尚未加载视图,因此我无法像更改标签的设置那样进行正确的设置工作文字等。