Каковы ключевые различия между RxSwift и Combine?

«Каковы ключевые различия между RxSwift и Combine?» — вопрос из категории Реактивное программирование, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

RxSwift и Combine — это фреймворки для реактивного программирования, но с разной экосистемой и подходами.

Критерий Combine (Apple) RxSwift (ReactiveX)
Происхождение Нативный фреймворк Apple. Сторонняя библиотека, порт ReactiveX для Swift.
Доступность iOS 13+, macOS 10.15+. iOS 9.0+.
Интеграция Глубокая интеграция с SwiftUI, Foundation (URLSession.dataTaskPublisher). Требует ручного импорта и управления зависимостями.
Основные типы Publisher, Subscriber, Subject (PassthroughSubject, CurrentValueSubject). Observable, Observer, Subject (PublishSubject, BehaviorSubject).
Обработка ошибок Использует тип Failure в Publisher<Output, Failure>. Использует общий тип Error в последовательностях.
Синтаксис и операторы Оптимизирован под Swift, часто более лаконичный. Огромный набор операторов из мира ReactiveX.

Примеры:

// Combine
Just("Hello, Combine!") // Publisher
    .sink { value in    // Subscriber
        print(value)
    }

// RxSwift
Observable.just("Hello, RxSwift!") // Observable
    .subscribe(onNext: { value in   // Observer
        print(value)
    })

Когда что выбирать:

  • Combine: Для новых проектов, начиная с iOS 13, особенно со SwiftUI. Будущее экосистемы Apple.
  • RxSwift: Для поддержки старых версий iOS (ниже 13), в кросс-платформенных проектах или при сильной зависимости от специфичных операторов ReactiveX.