This is Understanding Combine, written by Matt Neuburg. It is a work in progress. Corrections and suggestions are greatly appreciated (you can comment here). So are donations; please consider keeping me going by funding this work at Or buy my books: the current editions are iOS 13 Programming Fundamentals with Swift and Programming iOS 13. Thank you!

Transformers and Blockers

By transformers, I mean operators whose primary job is to take the incoming value from upstream and replace it with another value that passes downstream.

The transformer par excellence is .map, along with various other operators with map in their names.

By blockers, I mean operators whose primary job is to prevent an incoming value from passing downstream.

The blocker par excellence is .filter, which looks at each incoming value and either lets it through or stops it.

The distinction between transformers and blockers is not always hard and fast, so it makes sense to treat them together. Some operators do both. For example, .compactMap is both a transformer and a blocker: it can stop a value, or it can replace it and let the replacement pass downstream.

Table of Contents