Да, вы можете получить доступ к rootViewController из appDelegate, как вы заявили.
Если вы хотите получить доступ к appDelegate раньше, чем viewDidLoad (), вы всегда можете переопределить один из стандартных методов init () UIViewController.и получить доступ к appDelegate, как рекомендуется следующий вопрос:
Как получить ссылку на делегат приложения в Swift?
Если, например, выинициализируя UIViewController из раскадровки, вы можете переопределить init? (кодер aDecoder: NSCoder) в своем пользовательском классе UIViewController:
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// get the appDelegate here and do your magic
}
Надеюсь, это поможет.