Recent articles

Jump to a random post

Debugging network traffic with Charles

Updated on: February 10, 2020

When you perform a URL Request in your app, you typically configure the request in your code and when it’s all set up you pass it off to a URLSession data task, and the request should succeed if everything goes as expected. When the request is misconfigured, the server will hopefully return a useful error […]

Read post

Refactoring a networking layer to use Combine

Updated on: February 10, 2020

In the past two weeks I have introduced you to Combine and I’ve shown you in detail how Publishers and Subscribers work in Combine. This week I want to take a more practical route and explore Combine in a real-world setting. A while ago, I published a post that explained how you can architect and […]

Read post

How to add an element to the start of an Array in Swift?

Updated on: April 23, 2024

You can use Array’s insert(_:at:) method to insert a new element at the start, or any other arbitrary position of an Array: var array = ["world"] array.insert("hello", at: 0) // array is now ["hello", "world"] Make sure that the position that you pass to the at: argument isn’t larger than the array’s current last index […]

Read post

How to check if two date ranges overlap in Swift

Updated on: February 9, 2020

Dates in Swift can be compared to each other. This allows you to check whether one date comes before or after another date: if dateOne > dateTwo { print("dateOne comes after dateTwo") } else if dateOne < dateTwo { print("dateOne comes before dateTwo") } else if dateOne == dateTwo { print("dateOne is equal to dateTwo") […]

Read post

Tips to ask better questions

Published on: January 15, 2020

As developers, we all get stuck sometimes. When this happens we start searching for solutions on Google, or we ask questions on Stackoverflow, on the Swift forums, the iOS Developers Slack community or other places. Over the past couple of years, I have been actively trying to help people solve problems they were stuck on […]

Read post

Understanding Combine’s publishers and subscribers

Published on: January 13, 2020

In my previous post about Combine, I introduced you to Functional Reactive Programming (FRP) and I’ve shown you can subscribe to Combine publishers using the sink(receiveCompletion:receiveValue:) method. I also showed you how you can transform the output of publishers using some of its built-in functions like map and collect. This week I want to focus […]

Read post

Removing a specific object from an Array in Swift

Updated on: April 23, 2024

Arrays in Swift are powerful and they come with many built-in capabilities. One of these capabilities is the ability to remove objects. If you want to remove a single, specific object from an Array and you know its index, you can use remove(at:) to delete that object: var array = [1, 2, 3] array.remove(at: 0) […]

Read post

How to filter an Array in Swift?

Updated on: April 23, 2024

When you have an Array of elements, and you want to drop all elements that don’t match specific criteria from the Array, you’re looking for Array’s filter(isIncluded:) method. Let’s say you have an array of words and you only want to keep the words that are longer than three characters: let words = ["hello", "world", […]

Read post

Five tips to write better todos in Xcode

Updated on: February 10, 2020

We all write the dreaded // TODO: and // FIXME: comments every once in a while. Sometimes we do it because we know our code can be better but we’re not sure how, other times we don’t have the time to write an optimal solution because of deadlines, and other times we just want to […]

Read post

Expand your learning with my books

Practical Swift Concurrency header image

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

  • Eleven chapters worth of content.
  • 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