Поскольку во время вызова viewDidLoad
ваш контроллер представления еще не был добавлен в иерархию представления. Контроллер представления, который не является частью иерархии представления, не может представить другой контроллер представления. Вы должны получить сообщение журнала в консоли, говорящее о чем-то похожем на это, когда вы пытаетесь представить другой контроллер представления без асинхронной c отправки.
Ввод вызова в DispatchQueue.main.async
приводит к задержке презентации до следующего цикла runl oop, который окажется достаточным для того, чтобы ваш контроллер представления был добавлен в иерархию представлений после его вызова.
Лучшим решением было бы поставить проверку текущего пользователя в более подходящую место, возможно viewDidAppear
.