Выбор ответа Middle SwiftUI обновлено

Навигация в SwiftUI

Вопрос

Как в современном SwiftUI сделать программную навигацию с переходом на несколько экранов вглубь (deep link)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: NavigationStack(path:) с путём и .navigationDestination(for:). С iOS 16 навигация описывается данными: стек хранит путь, а экраны определяются по типу значения в navigationDestination.

Варианты ответа

  1. NavigationStack(path:) с путём и .navigationDestination(for:)правильный ответ
  2. NavigationView с цепочкой вложенных NavigationLink(isActive:)
  3. Вызвать pushViewController у UIHostingController для каждого экрана
  4. Поменять @State в корневой view на нужный экран и перерисовать её

Разбор

С iOS 16 навигация описывается данными: стек хранит путь, а экраны определяются по типу значения в navigationDestination. Чтобы открыть три экрана вглубь, достаточно записать три значения в путь. NavigationView и NavigationLink(isActive:) устарели. Вмешиваться в UIKit-навигацию из SwiftUI можно, но это обходной путь.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.