Connect with us

Программирование

Осваиваем фреймворк Observation в Swift

В этой статье мы узнаем, как использовать фреймворк Observation для обработки потоков данных в наших приложениях.

Опубликовано

/

     
     

Компания Apple представила новый фреймворк Observation, основанный на макрофункциях языка Swift. Новый фреймворк Observation в сочетании с функциями Swift Concurrency позволяет заменить Combine, который выглядит устаревшим по мнению Apple. В этой статье мы узнаем, как использовать фреймворк Observation для обработки потоков данных в наших приложениях.

Использовать новый фреймворк Observation очень просто. Все, что вам нужно сделать, — это пометить свой класс макросом @Observable.

Как видно из приведенного примера, мы используем макрос @Observable для аннотирования нашего типа Store. После этого мы можем наблюдать любую переменную в типе Store. В нему у нас есть только одна переменная, которая определяет состояние хранилища. Другое поле — это константа let, которая никогда не изменяется.

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

Фреймворк Observation запускает функцию onChange только один раз, поэтому для постоянного наблюдения за изменениями ее следует вызывать рекурсивно. Еще один момент, о котором следует помнить, — замыкание onChange выполняется до фактического применения изменения. Поэтому мы откладываем действие onChange, запуская новую задачу.

В SwiftUI для наблюдения за изменениями не нужно использовать функцию withObservationTracking. SwiftUI автоматически отслеживает изменения любого свойства типа observable, используемого внутри тела представления.

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

Apple упрощает набор оберток свойств, которые мы должны использовать с новым фреймворком Observation. Вместо обертки свойств @StateObject мы теперь можем использовать @State. Обертка свойства @State теперь работает для простых типов значений и любых наблюдаемых типов.

Аналогичный подход применяется и к свойству environment фреймворка SwiftUI. Теперь нет необходимости в обертке свойства @EnvironmentObject. Теперь можно использовать обертку свойства @Environment и модификатор представления environment с observable типами.

И последнее, что вас может интересовать, — как вывести биндинг из наблюдаемого типа. Для этого случая в SwiftUI предусмотрена обертка свойства @Bindable, которая работает только с наблюдаемыми типами.

С помощью обертки свойств @Bindanble можно легко создавать привязки из свойств любого наблюдаемого типа. Иногда для создания привязок может потребоваться инлайн @Bindable внутри тела представления.

Мне нравится, как новый фреймворк Observation упрощает работу с потоком данных в SwiftUI. Надеюсь, вам понравился этот пост. Спасибо, что прочитали, и до встречи на следующей неделе!

Источник

Видео

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: