Я хочу иметь возможность разрешить пользователю изменять некоторые свойства графического интерфейса пользователя сразу через все приложение. Чтобы достичь этого, я подумал о создании протокола вроде
protocol MyProtocol {
func changeProperties()
}
так что каждый UIViewController может изменять эти свойства по-своему, а затем вызывать этот метод во всех текущих создаваемых экземплярах контроллеров.
Однако я не знаю, возможно ли это. Моей первой идеей было получить доступ к самому корневому контроллеру приложения, а затем пройти через все дочерние элементы, рекурсивно вызывая метод. Что-то вроде
func updatePropertiesFrom(_ vc: UIViewController) {
for child in vc.childViewControllers {
if let target = child as? MyProtocol {
target.changeProperties()
}
updatePropertiesFrom(child)
}
}
let appRootController = ...
updatePropertiesFrom(appRootController)
Я не знаю, как получить этот appRootController, и я хотел бы знать, есть ли более элегантный способ сделать это. Спасибо.