🚀 New blog post!

AsyncCombine: Because Async Code Shouldn’t Be Ugly

I built AsyncCombine to bring back Combine’s expressive syntax - sink, assign, CombineLatest, and more - but powered by Swift Concurrency.

Why? Because observing an @Observable class’s properties from a SwiftUI view is easy - but doing the same from another ViewModel got way harder and messier once @Published disappeared.

Check out my article that goes over how I solved it.

đź”— https://lumley.io/blogs/async-combine/

AsyncCombine: Because Async Code Shouldn’t Be Ugly

When Swift first introduced Combine, I loved it. The syntax was expressive, pipelines were easy to follow, and @Published made state changes feel almost magical. But as Apple pushed us toward Swift Concurrency, I decided to bite the bullet and migrate one of my apps away from Combine. The migration worked; async/await is powerful, predictable, and in many ways simpler. But I quickly noticed something, parts of my code just weren’t as easy to read anymore. A neat Combine one-liner became a few clunky async calls. And to make things worse, I couldn’t rely on @Published to observe changes between view models anymore.

My Portfolio