Как стать автором
Обновить

Комментарии 2

Привет!

Интересная статья.

Вопрос 1: почему завернул containered в массив?

self.stack += [containered]

Вопрос 2: при описанном подходе мы отказываемся от стандартных анимаций переходов между экранами (и от модальных презентаций), а значит должны реализовать кастомные, верно?

Если да, то не слишком много будет работы с повторением стандартных анимаций и исправлением багов, особенно учитывая годы костылей на UIKit у любителей понаделать кастомные tab/nav-бары?

Я работал с UIKit 3 года, но повидал много таких костылей (сам не грешил).

Бонус: предлагаю заменить @ObservedObject на @StateObject внутри struct ContentView, потому что не рекомендовано использовать @ObservedObject для хранения состояния вьюшки в SwiftUI, для этого предназначен @StateObject, цитата:

SwiftUI might create or recreate a view at any time, so it’s important that initializing a view with a given set of inputs always results in the same view. As a result, it’s unsafe to create an observed object inside a view. Instead, SwiftUI provides the StateObject attribute for this purpose

Вопрос 1: почему завернул containered в массив?

Не уверен, что понял вопрос. Массив - потому что нужно было реализовать функциональность стека. Так как коллекция "стек" в Swift отсутствует, то проще всего было использовать именно массив. В целом - это можно делать по-разному.
Если вопрос касался ContainerView, то потому, для инициализации массива мы не можем использовать View или some View.

Вопрос 2: при описанном подходе мы отказываемся от стандартных анимаций переходов между экранами (и от модальных презентаций), а значит должны реализовать кастомные, верно?

Точно такую анимацию как это делается при использовании UINavigationViewController в UIKIt сделать не получается. Но достаточно добавить   .transition(.move(edge: .trailing)) к "навигационному вью" и .transition(.move(edge: .bottom)) - для модального окна - чтоб получить схожее поведение.

Бонус: предлагаю заменить @ObservedObject на @StateObject внутри struct ContentView, ...

Согласен. Для данного примера @StateObject подходит лучше.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории