Какой опыт с реактивным программированием (Combine, RxSwift)
Что проверяют
Отличаете ли вы реальный опыт от «читал про операторы». Вопрос открытый, ждут ваш проект: что именно вы решали реактивно и почему не обошлись колбэками. Следом спросят про утечки, потоки и как это уживается с async/await.
Как отвечать
Сначала задача, потом инструмент. Реактивный подход оправдан там, где несколько источников событий надо собрать в одно состояние: поле поиска с задержкой, кеш и сеть, статус авторизации.
- основа Combine:
Publisher,Subscriber,Cancellable. Типизированная ошибка прямо в сигнатуре это главное отличие от RxSwift, где ошибка нетипизированная; - типовой конвейер:
debounce(for:scheduler:),removeDuplicates(),mapв запрос иswitchToLatest, чтобы отменить предыдущий, затемcatchилиreplaceError, а в концеsinkлибоassign(to:on:); - потоки:
subscribe(on:)задаёт, где произойдёт подписка и работа источника,receive(on:)где придут значения. Перед обновлением UI нуженreceive(on: DispatchQueue.main); - горячее и холодное: у
PassthroughSubjectиCurrentValueSubjectподписчики общие, у обычного паблишера каждая подписка запускает работу заново. Отсюдаshare()иmulticast, иначе два подписчика дают два сетевых запроса; - RxSwift:
Observable,DriverиSignalдля интерфейса (главный поток гарантирован, ошибок нет),DisposeBag, биндинги изRxCocoa.
Отдельно скажите про сегодняшний день, это ценится. Combine Apple почти не развивает: разовые операции в новом коде идут через async/await, потоки значений через AsyncStream и AsyncSequence, а перерисовка SwiftUI через @Observable из Observation. Реактивные библиотеки остаются в старых кодовых базах и там, где нужны богатые операторы комбинирования.
Где спотыкаются
Держат AnyCancellable в локальной переменной, и подписка умирает сразу. Обратная крайность это сильная ссылка на self в sink: [weak self] тут нужен ровно так же, как в обычных замыканиях.
Путают subscribe(on:) и receive(on:) и пытаются первым увести в фон весь конвейер.
Пересказывают список операторов вместо своего кейса. map, filter и zip интервьюер знает сам, ему нужен ваш проект и что в нём пошло не так.