Вам не нужно суетиться с видами контейнера. В вашем ViewController1
просто добавьте ссылки на DisplayedViewControllerTab1 или другие необходимые вам v c, а затем получите к ним прямой доступ.
Ваш код V C будет выглядеть примерно так:
class ViewController1: UIViewController {
//...
var displayedVC1: DisplayedViewControllerTab1?
//...
}
А теперь ваш код:
var data: ModelData?
if let navController = tabBarController.viewControllers?[0] as? NavController1,
let childNavVC = navController.children.first as? ViewController1 {
data = childNavVC.displayedVc1
}
PS Для удобства, если у вас есть свой собственный класс TabBarController вы можете добавить все ссылки, которые вам нужны, когда контроллер создан или просто имеет вычисленные свойства, поэтому вам не нужно все время углубляться в иерархию go.
В вашем TabbarViewController
класс:
var myViewController1: MyViewControllerOne? {
return (viewControllers[0] as? NavController)?.children.first as? MyViewControllerOne
}
var myViewController2: MyViewControllerTwo? {
return (viewControllers[1] as? NavController)?.children.first as? MyViewControllerTwo
}