SwiftUI 4: как не открывать внутренние представления при использовании NavigationStack?

Предположим, я работаю над библиотекой календарей в SwiftUI 4. В календаре есть кнопка, позволяющая пользователю выбрать месяц. Когда пользователь нажимает на эту кнопку, он переходит к представлению, в котором перечислены все месяцы, которые пользователь может выбрать. Ключевая настройка здесь заключается в том, что календарю необходимо перейти к внутреннему представлению, и я бы хотел, чтобы внутреннее представление не было видно вызывающему абоненту.

Однако с новым в SwiftUI 4 это кажется проблематичным.

Сценарий 1: если вызывающая сторона устанавливает без указания пути (то есть это непрограммный стек навигации), мы можем скрыть внутреннее представление, вызвав внутри библиотеки календаря (см. подход, обсуждаемый здесь )

Сценарий 2 : если вызывающая сторона устанавливает неоднородный путь (то есть использует ), мы можем сделать то же самое, что и в сценарии 1. Так что это тоже нормально.

Однако использование имеет ограничения. Невозможно повторить значения в пути, чтобы отфильтровать недопустимые. Например, в приложении для финансового планирования, когда пользователь удаляет учетную запись, мы хотели бы удалить подробное представление этой учетной записи в стеке навигации. В этом случае мы не можем использоватьпотому что мы не можем повторять значения в пути. Это приводит нас к сценарию 3.

Сценарий 3 : если вызывающий абонент устанавливаетс однородным путем (например, массивом), то у нас есть проблема, потому что нам нужно открыть внутреннее представление вызывающей стороне. Вызывающий должен определить значение для этого внутреннего представления, чтобы его можно было добавить к пути. Вызывающий также должен будет добавить поддержку внутреннего представления вnavigationDestination()

Поскольку мы (автор библиотеки) понятия не имеем, как вызывающая сторона будет использовать библиотеку, нам нужно поддерживать наихудший случай (сценарий 3). Это означает, что мы должны предоставить вызывающей стороне внутреннее представление.

Верно ли мое понимание выше? Кажется довольно ограничением новогоAPI для меня. Как бы вы это сделали?

0 ответов

Другие вопросы по тегам