Статья подготовлена для студентов курса «iOS Разработчик. Продвинутый курс» в образовательном проекте OTUS.
На конференции WWDC 2019 был представлен новый фреймворк Combine. Всё последнее десятилетие среди программистов становились популярными декларативный и Event-based подходы к разработке приложений, т. к. они дают преимущество в скорости разработки приложений.
Combine предоставляет следующие возможности:
1. Асинхронное выполнение кода.
2. Составные компоненты.
3. Более простой мультитрединг.
4. Кроссплатформенный код.
Combine позволяет выполнять код «реактивно».
Publishers and Subscribers
Основой Combine является 2 концепции:
1. Subscriber выполняет роль Observer.
2. Publisher выполняет роль Observable.
Самый короткий пример их использования:
Объявляем константу, где в структуру Just оборачивается строка "Hello", — это наш паблишер, который оповестит только раз. Ниже добавляем подписку с замыканием с помощью метода sink. И этот пример напечатает в итоге строку Hello.
@Published Property Wrapper
В Swift 5.1 появилась возможность использовать Property Wrappers, которые изначально назывались Property Delegates. Это очередная обёртка в виде структуры, позволяющая добавлять на чтение или запись свойства (property) дополнительное поведение. Combine же даёт возможность использовать их через @Published.
Subjects
В Combine такие сущности, как Subject также являются паблишерами, которым мы можем посылать события. Сейчас у нас есть 2 вида Subjects:
1. PassthroughSubject, с помощью которого вы получите все события, которые случились после вашей подписки.
2. CurrentValueSubject — получите всё тоже, что и с помощью PassthroughSubject, но также и предыдущее или инициализированное значение
Объявление Subjects требует от нас, чтобы кроме выходного типа мы также указали тип для ошибки, можем просто указать здесь Never. Функция eraseToAnyPublisher() делает нам Type Erasure для паблишера к типу AnyPublisher. Дальше уже знакомая нам подписка с помощью sink. События мы будет посылать с помощью метода send и получим лишь 2 последних отправления:
Использование CurrentValueSubject отличается тем, что нам нужно указать начальное значение. И результат мы получим:
Занятия на продвинутом курсе «iOS разработчик» начнутся уже 27 августа. Торопитесь занять свободные места!
УСПЕТЬ В ГРУППУ