Hi, my name is Donny

I'm a curious, passionate iOS Developer from The Netherlands who loves learning and sharing knowledge.

Take a look at my books

Practical Combine

Practical Combine is a book aimed at intermediate to advanced developers who want to learn more about Apple's Combine framework. This book takes you all the way from the basics to building custom Combine publishers using Practical, useful examples that you can start using immediately.

Buy on Gumroad

Practical Core Data

Practical Core Data is for intermediate to advanced developers who want to learn more about Core Data. Whether you're new to Core Data, or tried using it years ago, you'll find that Practical Core Data introduces you to all the essentials to get you up and running with the framework.

Buy on Gumroad

Recent articles

Debugging Network Traffic With Proxyman

May 12, 2022

Disclaimer: This post is not sponsored by Proxyman, nor am I affiliated with Proxyman in any way. I pay for my license myself, and this post is simply written as a guide to learning more about a tool that I find very important in the iOS Developer toolbox. Networking is an essential part of modern iOS applications. Most apps I’ve worked have some kind of networking component. Sometimes the networking layer involves user authentication, token refresh flows, and more. Other...

Read more...

The difference between checked and unsafe continuations in Swift

April 24, 2022

When you’re writing a conversion layer to transform your callback based code into code that supports async/await in Swift, you’ll typically find yourself using continuations. A continuation is a closure that you can call with the result of your asynchronous work. You have the option to pass it the output of your work, an object that conforms to Error, or you can pass it a Result. In this post, I won’t go in-depth on showing you how to convert your...

Read more...

Wrapping existing asynchronous code in async/await in Swift

April 24, 2022

Swift’s async/await feature is an amazing way to improve the readability of asynchronous code on iOS 13 and newer. For new projects, this means that we can write more expressive, more readable, and easier to debug asynchronous code that reads very similar to synchronous code. Unfortunately, for some of us adopting async/await means that we might need to make pretty significant changes to our codebase if it’s asynchronous API is currently based on functions with completion handlers. Luckily, we can...

Read more...

Comparing lifecycle management for async sequences and publishers

April 12, 2022

In my previous post you learned about some different use cases where you might have to choose between an async sequence and Combine while also clearly seeing that async sequence are almost always better looking in the examples I’ve used, it’s time to take a more realistic look at how you might be using each mechanism in your apps. The details on how the lifecycle of a Combine subscription or async for-loop should be handled will vary based on how...

Read more...

Comparing use cases for async sequences and publishers

April 12, 2022

Swift 5.5 introduces async/await and a whole new concurrency model that includes a new protocol: AsyncSequence. This protocol allows developers to asynchronously iterate over values coming from a sequence by awaiting them. This means that the sequence can generate or obtain its values asynchronously over time, and provide these values to a for-loop as they become available. If this sounds familiar, that’s because a Combine publisher does roughly the same thing. A publisher will obtain or generate its values (asynchronously)...

Read more...

What is the "any" keyword in Swift?

March 15, 2022

With Swift 5.6, Apple added a new keyword to the Swift language: any. If you see this in your code, you might think it’s similar to the some keyword but it’s not quite the same thing. Let’s take a look at the any keyword as it’s intended to be used: protocol Networking { func fetchPosts() async throws -> [Post] // ... } struct PostsDataSource { let networking: any Networking // ... } 💡Tip: If you’re not familiar with Swift’s some...

Read more...