Recent articles

Jump to a random post

Profiling and debugging your Combine code with Timelane

Published on: March 16, 2020

When we write code, we write bugs. It’s one of the laws of the universe that we can’t seem to escape. The tools we have to discover, analyze and fix these bugs are extremely important because without good debugging tools we’d be poking at a black box until we kind of figure out what might […]

Read post

What is @escaping in Swift?

Updated on: January 20, 2025

If you’ve ever written or used a function that accepts a closure as one of its arguments, it’s likely that you’ve encountered the @escaping keyword. When a closure is marked as escaping in Swift, it means that the closure will outlive, or leave the scope that you’ve passed it to. Let’s look at an example […]

Read post

Using Result in Swift 5

Published on: March 2, 2020

As soon as Swift was introduced, people were adding their own extensions and patterns to the language. One of the more common patterns was the usage of a Result object. This object took on a shape similar to Swift’s Optional, and it was used to express a return type that could either be a success […]

Read post

Using KeyPaths as functions in Swift

Updated on: November 5, 2025

In Swift, we’re able to pass a KeyPath instead of a closure to certain functions. It’s what powers syntax like map(\.someProperty) which you might have seen before. In this post, we’ll compare what code looks like without KeyPaths as functions, and how passing a KeyPath as a function can simplify your code. // Swift 5.1 […]

Read post

Error handling in Swift with do catch

Updated on: July 4, 2025

Handling errors in Swift is done using a mechanism where functions specify their ability to throw errors. In modern Swift versions (6.0 and up), functions can even specify the type of the error that the function might throw. When we call a function that can throw, we use special syntax to either ignore the error […]

Read post

Adding default values to subscript arguments in Swift 5.2

Published on: February 19, 2020

The ability to define custom subscripts in Swift is really powerful. It allows us to write very natural and concise code. Consider the following example of a Grid with a custom subscript: struct Grid { let items : [[GridItem]] subscript(x x: Int, y y: Int) -> GridItem? { guard !items.isEmpty, (items.startIndex…items.index(before: items.endIndex)).contains(x) else { return […]

Read post

How and when to use callAsFunction in Swift 5.2

Published on: February 17, 2020

A new Swift 5.2 feature is the ability to call instances of types as functions. Or, as the Swift Evolution proposal calls it “Callable values of user-defined nominal types”. The very short description of this feature is that it allows you to call instances of any type that has a callAsFunction method implemented as if […]

Read post

Expand your learning with my books

Practical Combine header image

Learn everything you need to know about Combine and how you can use it in your projects with Practical Combine. It contains:

  • Thirteen chapters worth of content.
  • Playgrounds and sample projects that use the code shown in the chapters.
  • Free updates for future iOS versions.

The book is available as a digital download for just $39.99!

Learn more