Combine Operators & Pipelines
Operators are how you shape a Combine stream. This lesson covers map , filter , debounce , combineLatest , and flatMap , plus delivering results safely with receive(on:) and assign(to:) .
Learn Combine Operators & Pipelines in our free Swift course — a beginner-friendly interactive lesson with worked examples, a practice exercise and a quick…
Part of the free Swift course at LearnCodingFast — hands-on lessons with examples you run in your browser, plus practice exercises and a quick quiz.
What You'll Learn in This Lesson
1️⃣ map and filter
filter screens values; map transforms what survives. Chained together they read top to bottom, just like the data flows.
2️⃣ combineLatest
combineLatest joins two streams: whenever either emits, you get the newest value from each. It only begins once both have emitted at least once.
3️⃣ debounce, receive(on:), and assign
debounce waits for a pause before emitting — ideal for search-as-you-type. receive(on:) moves delivery to the main thread for UI safety, and assign(to:on:) writes straight into a property.
Now you try. Fill in the operator that assigns into a property.
📋 Quick Reference
Build a pipeline that counts words as sentences arrive. Run it and compare with the comments.
Practice quiz
What does the map operator do in Combine?
- Transforms each emitted value
- Filters values
- Delays values
- Combines two publishers
Answer: Transforms each emitted value. map transforms every value the upstream publisher emits.
Which operator only lets through values that pass a test?
- map
- merge
- filter
- assign
Answer: filter. filter forwards only values for which the closure returns true.
What problem does debounce solve?
- Sorting values
- Waiting for a pause before emitting, e.g. for search text
- Combining errors
- Caching to disk
Answer: Waiting for a pause before emitting, e.g. for search text. debounce waits for a quiet interval, ideal for rapidly changing input like typing.
combineLatest emits when...
- Only the first publisher emits
- All publishers finish
- An error occurs
- Any input publisher emits, pairing the latest value from each
Answer: Any input publisher emits, pairing the latest value from each. combineLatest emits the most recent value from each source whenever any of them changes.
What does flatMap return for each value?
- A new publisher whose values are flattened into the stream
- A single value
- An array
- Nothing
Answer: A new publisher whose values are flattened into the stream. flatMap maps each value to a publisher and flattens the emissions into one stream.
Why use receive(on: DispatchQueue.main)?
- To speed up the network
- To deliver downstream values on the main thread for UI updates
- To filter values
- To cancel the subscription
Answer: To deliver downstream values on the main thread for UI updates. receive(on:) switches delivery to a chosen queue, e.g. main for UI work.
What does assign(to:on:) do?
- Transforms values
- Delays values
- Merges streams
- Writes each received value into a property via a key path
Answer: Writes each received value into a property via a key path. assign(to:on:) sets a value onto an object's property using a key path.
After debounce, which value is emitted?
- The first value
- The most recent value once the pause elapses
- A random value
- All buffered values
Answer: The most recent value once the pause elapses. debounce emits only the latest value after the specified quiet period.
Operators in Combine are chained to form a...
- Pipeline that transforms the stream step by step
- Database
- View hierarchy
- Single function
Answer: Pipeline that transforms the stream step by step. Chained operators build a pipeline that processes values as they flow.
removeDuplicates does what?
- Sorts the stream
- Adds delays
- Drops a value equal to the one immediately before it
- Removes all values
Answer: Drops a value equal to the one immediately before it. removeDuplicates suppresses consecutive equal values.