У вас всегда есть ссылка на rootViewController, так зачем использовать контроллер представления для навигации?
Вы можете выгрузить всю логику для этого в координатор (или маршрутизатор, как вам угодно). ) и добавьте некоторую инкапсуляцию для гораздо более аккуратной кодовой базы, чем вы описали здесь.

Хотя функционально. Вещь на высшем уровне!