RxSwift to Combine Cheatsheet
This is a Cheatsheet for RxSwift developers interested in Apple's new Combine framework.
It's based on the following blog post: https://medium.com/gett-engineering/rxswift-to-apples-combine-cheat-sheet-e9ce32b14c5b
RxSwift
Combine
Deployment Target
iOS 8.0+
iOS 13.0+
Platforms supported
iOS, macOS, tvOS, watchOS, Linux
iOS, macOS, tvOS, watchOS, UIKit for Mac ¹
Spec
Reactive Extensions (ReactiveX)
Reactive Streams (+ adjustments)
Framework Consumption
Third-party
First-party (built-in)
Maintained by
Open-Source / Community
Apple
UI Bindings
RxCocoa
SwiftUI ²
RxSwift
Combine
Notes
AnyObserver
AnySubscriber
BehaviorRelay
❌
Simple wrapper around BehaviorSubject, could be easily recreated in Combine
BehaviorSubject
CurrentValueSubject
This seems to be the type that holds @State under the hood
Completable
❌
CompositeDisposable
❌
ConnectableObservableType
ConnectablePublisher
Disposable
Cancellable
DisposeBag
A collection of AnyCancellables
Call anyCancellable.store(in: &collection), where collection can be an array, a set, or any other RangeReplaceableCollection
Driver
ObservableObject
Both guarantee no failure, but Driver guarantees delivery on Main Thread. In Combine, SwiftUI recreates the entire view hierarachy on the Main Thread, instead.
Maybe
Optional.Publisher
Observable
Publisher
Observer
Subscriber
PublishRelay
❌
Simple wrapper around PublishSubject, could be easily recreated in Combine
PublishSubject
PassthroughSubject
ReplaySubject
❌
ScheduledDisposable
❌
SchedulerType
Scheduler
SerialDisposable
❌
Signal
❌
Single
Deferred + Future
Future has to be wrapped in a Deferred, or its greedy as opposed to Single's laziness
SubjectType
Subject
TestScheduler
❌
There doesn't seem to be an existing testing scheduler for Combine code
RxSwift
Combine
Notes
allSatisfy
allSatisfy
amb()
❌
asObservable()
eraseToAnyPublisher()
asObserver()
❌
bind(to:)
assign(to:on:)
Assign uses a KeyPath which is really nice and useful. RxSwift needs a Binder / ObserverType to bind to.
buffer
buffer
catch
catch
catchAndReturn
replaceError(with:)
combineLatest
combineLatest, tryCombineLatest
compactMap
compactMap, tryCompactMap
concat
append, prepend
concatMap
❌
contains
contains
count
count
create
❌
Apple removed AnyPublisher with a closure in Xcode 11 beta 3 :-(
debounce
debounce
debug
print
deferred
Deferred
delay
delay
delaySubscription
❌
dematerialize
❌
distinctUntilChanged
removeDuplicates, tryRemoveDuplicates
do
handleEvents
element(at:)
output(at:)
empty
Empty(completeImmediately: true)
enumerated
❌
error
Fail
filter
filter, tryFilter