Я создаю приложение SwiftUI и пытаюсь определить отображаемое в данный момент имя экрана во время выполнения для отладки и использования внутренних инструментов.
Моя структура навигации фиксирована и использует общий контейнер/базовое представление, охватывающее все экраны. Я хочу, чтобы контейнер определял, какой экран в данный момент отображается, без добавления идентификаторов или модификаторов для каждого экрана.
Вот что я наблюдал:
• Передача self или экземпляра представления в контейнер невозможна, поскольку представления SwiftUI являются типами значений и воссоздаются во время рендеринга.
• Использование String(описание: Content.self) внутри универсального контейнера возвращает только общий тип, а не конкретное представление, которое в данный момент существует. визуализируется.
• Обертывание всех экранов в базовое представление/представление контейнера отображает только тип контейнера, если дополнительные метаданные не вводятся вручную на экран.
• Отслеживание экрана с помощью NavigationPath или пользовательского маршрутизатора часто приводит к созданию общих или внутренних типов (например, Root, Internal), а не к реальному видимому представлению.
Вопрос:
С точки зрения дизайна SwiftUI, так ли это? принципиально невозможно для родительского представления/представления-контейнера узнать конкретный тип видимого в данный момент дочернего представления во время выполнения без явной передачи идентификатора?
Если да, то какие ограничения дизайна в SwiftUI вызывают такое поведение?
Я не ищу сторонние библиотеки или субъективные рекомендации, а скорее объяснение ограничения или механизма уровня языка, который мне может не хватать.
Подробнее здесь: https://stackoverflow.com/questions/798 ... ntly-visib