Ruby MIT

rxswift-to-combine-cheatsheet

RxSwift to Apple’s Combine Cheat Sheet

C

CombineCommunity

Dernière activité 20 janv. 2026
CombineCommunity/rxswift-to-combine-cheatsheet

2,1 k

étoiles

128

forks

8

issues ouvertes

applecombinereactivereactive-programmingrxswiftswiftui

Ce README est souvent en anglais.

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
first first, tryFirst
first(where:) first(where:), tryFirst(where:)
flatMap flatMap
flatMapFirst ❌
flatMapLatest switchToLatest
from(optional:) Optional.Publisher(_ output:)
groupBy ❌
ifEmpty(default:) replaceEmpty(with:)
ifEmpty(switchTo:) ❌ Could be achieved with composition - replaceEmpty(with: publisher).switchToLatest()
ignoreElements ignoreOutput
interval ❌
just Just
last(where:) last(where:), tryLast(where:)
map map, tryMap
materialize ❌
max max
merge merge, tryMerge
merge(maxConcurrent:) flatMap(maxPublishers:)
min min
multicast multicast
never Empty(completeImmediately: false)
observe(on:) receive(on:)
of Sequence.publisher publisher property on any Sequence or you can use Publishers.Sequence(sequence:) directly
publish makeConnectable
range ❌
reduce reduce, tryReduce
refCount autoconnect
repeatElement ❌
retry(when:) ❌
retry, retry(3) retry, retry(3)
sample ❌
scan scan, tryScan
share share There’s no replay or scope in Combine. Could be “faked” with multicast.
skip(3) dropFirst(3)
skip(until:) drop(untilOutputFrom:)
skip(while:) drop(while:), tryDrop(while:)
startWith prepend
subscribe sink
subscribe(on:) subscribe(on:) RxSwift uses Schedulers. Combine uses RunLoop, DispatchQueue, and OperationQueue.
take(1) prefix(1)
take(until:) prefix(untilOutputFrom:)
take(while:) prefix(while:), tryPrefix(while:)
takeLast last
throttle throttle
timeInterval measureInterval
timeout timeout
timer Timer.publish
toArray() collect()
window collect(Publishers.TimeGroupingStrategy) Combine has a TimeGroupingStrategy.byTimeOrCount that could be used as a window.
withLatestFrom ❌
zip zip

Contributing

Add any data/operators to the appropriate CSV files in the Data folder, run bundle install and generate.rb.

Finally, commit the changes and submit a Pull Request.

Projets similaires

Reactive Programming in Swift

Swiftfunctionaliosobserver
RReactiveX
24,6 k étoiles4,2 k

CombineExt provides a collection of operators, publishers and utilities for Combine, that are not provided by Apple themselves, but are common in other Reactive Frameworks and standards.

Swiftcombine-frameworkreactive-programmingreactive-streams
CCombineCommunity
1,8 k étoiles159

Swift + Redux + (SwiftConcurrency | Combine | RxSwift | ReactiveSwift | ReactiveConcurrency) -> SwiftRex

Swiftapplecombinecombine-framework
SSwiftRex
619 étoiles29