Отсутствующее руководство

Разработчики UIKit, возможно, слышали о термине Просмотр жизненного цикла методов. Хорошо, если вы разработчик UIKit, позвольте мне задать несколько вопросов, прежде чем мы углубимся в тему.

Не могли бы вы перечислить все методы цикла просмотра в ViewController, не касаясь Xcode сейчас?

Кроме того, не могли бы вы указать метод цикла просмотра при переходе между двумя ViewController в правильном порядке? 😅

Хорошо, если вы правильно ответили на приведенные выше вопросы, вам будет легко. Не могли бы вы указать то же самое при представлении ViewController как PageSheet или FormSheet на iPad?

Немного сложно, правда! Может, по крайней мере, для меня 🤯

У нас есть несколько методов жизненного цикла представления в ViewControllers, которые будут вызываться в разных последовательностях в зависимости от нашего дизайна. Это может быть еще более сложным, если у нас есть настраиваемый пользовательский интерфейс, использующий ContainerView на одном экране.

В SwiftUI это просто.

Методы жизненного цикла в SwiftUI

Насколько я проверил, в документации Apple нет официальных слов, например, "Просмотр жизненных методов представления в SwiftUI", но у нас есть несколько вещей, с которыми мы можем сравнить Методы жизненного цикла UIKit.

Хорошо, давайте посмотрим, что эквивалентные вещи есть в SwiftUI, и насколько это просто. Обычно мы будем использовать методы жизненного цикла представления, чтобы что-то делать всякий раз, когда представление появляется или исчезает в UIKit. Например: обращение к API или очистка данных.

В SwiftUI нет ViewControllers, и все - View. Чистые взгляды. Когда пользователь откроет ваше приложение, вы инициализируете представление и покажете его на экране; навигация между экранами выполняется представлением под названием NavigationView;. Функциональность вкладок управляется представлением под названием TabView и т. д.

В отличие от UIKit, у нас есть только два простых метода экземпляра в SwiftUI, которые могут действовать как методы жизненного цикла представления. Они есть:

.onAppear()
.onDisappear()

Проверьте код в приведенном выше ContentView.swift файле и продолжайте. Я добавил onAppear() и onDisappear() для разных представлений с отдельными смайликами для визуальной идентификации в консоли.

Ссылка на репозиторий Github для рабочей демонстрации.

🔴 = вид навигации
🟢 = вид списка
🟠 = вид слайдера

.onAppear ():

.onAppea() запускается, когда на экране появляется представление.

Мы можем сравнить этот метод с viewDidAppear() в UIKit. Мы можем использовать этот метод для выполнения действия всякий раз, когда появляется представление. Например: получение данных из локальной или удаленной базы данных.

В ContentView.swift файле есть несколько представлений, но я сфокусируюсь только на тех представлениях, которые я добавил методы onAppear() и onDisappear().

У нас есть логика для отображения трех представлений (🔴, 🟢, & 🟠) на экране, а два представления (🔴 и 🟢) появляются сразу же, как только пользователь переходит на экран. Таким образом, onAppear() из двух видимых представлений будет вызываться немедленно в порядке от parent(🔴) до children(🟢).

Значок третьего вида (🟠) onAppear() будет вызываться только тогда, когда он виден на экране. Я показал ползунок только тогда, когда пользователь включил переключатель. Когда переключатель выключен, ползунок не будет виден на экране, поэтому onAppear() не будет вызываться.

Если мы постоянно включаем и выключаем переключатель, ползунок (🟠) onAppear() и onDisappear() будет вызываться несколько раз.

.onDisappear ():

.onDisappear() срабатывает, когда изображение исчезает с экрана.

Мы можем сравнить этот метод с viewDidDisappear() в UIKit. Мы можем использовать это событие для выполнения действия всякий раз, когда представление исчезает. Например: очистка данных.

Я добавил демонстрацию перехода от одного представления к другому с помощью NavigationView и TabView . Большинство дочерних представлений onAppear() и onDisappear() вызываются в том же порядке в NavigationView и TabView навигации.

Но onDisappear() NavigationView не будет вызываться при переходе к DetailsView, потому что NavigationView по-прежнему отображается в DetailsView.

Отправка представления:

Когда вы переходите к другому представлению с помощью представления навигации, сначала вызывается onAppear() целевого представления, а затем вызывается onDisappear() исходного представления.

Представление обзора:

Когда вы представляете другое представление с помощью листа, будет вызываться onAppear() целевого представления, а onDisappear() исходного представления не вызывается, так как исходное представление находится на фоне представленного представления.

Заключение:

Используя методы экземпляра onAppear() и onDisappear() в представлении, мы можем удовлетворить наши потребности, когда представление появляется или исчезает на экране.

Когда у вас есть несколько вложенных представлений на экране, нам нужно найти идеальное представление, чтобы добавить действия onAppear() и onDisappear() для запуска вашей пользовательской логики.

SwiftUI - интересный и очень простой фреймворк для разработки приложения, чем UIKit. Играйте с ним, когда найдете время.

Ссылка на репозиторий Github для демонстрационного проекта.

Спасибо 👨🏻‍💻