Concurrency
Dive deep into Swift’s latest concurrency changes, covering async-await, actors, and more.
Async await in Swift explained with code examples
Async await is part of the new structured concurrency changes that arrived in Swift 5.5 during WWDC 2021. Concurrency in Swift means allowing multiple pieces of code to run at the same time. This is a very simplified description, but it should give you an idea already of how important ...
Global actor in Swift Concurrency explained with code examples
Swift Concurrency introduced the concept of a global actor among async/await and tasks. The most common one is likely @MainActor, which I already explained in depth. However, you can also create custom global actors. Although they have existed for a few years, it remains unclear for many developers when and ...
Combine and Swift Concurrency: A threading risk
Many developers are migrating from Combine to Swift Concurrency. Swift Concurrency is here to stay, and Combine hasn't received updates in recent years. While Combine is a mature framework that may not need many updates, it's clear that the Swift team is focusing on a future with Swift Concurrency. When ...
Accurate iOS testing on real iPhones and iPadsSimulators don’t behave like real devices and that means bugs can slip through. QA Wolf
runs every iOS test on real iPhones and iPads in parallel, so you get results that match what your users will experience. No flakes, no missed issues, just reliable coverage you can trust before every release. Test your iOS app the way users use it —
Schedule a demo.
Threads vs. Tasks in Swift Concurrency
Are Threads the same as Tasks in Swift Concurrency? You may wonder if you're used to writing Swift or Objective-C using Grand Central Dispatch (GCD) and traditional APIs. A so-called threading mindset has helped us develop apps that work with asynchronous functions for years. Modern concurrency uses Swift Concurrency and ...
Modern Swift Lock: Mutex & the Synchronization Framework
Swift offers several solutions to lock access to mutable content and prevent so-called data races. Locks like NSLock, DispatchSemaphore, or a serial DispatchQueue are a popular choice for many. Some articles compare their performance and tell you which one works best, but I'd like to introduce you to a modern ...
Swift Concurrency & Swift 6 Course (Launch offer)
A Swift Concurrency Course that helps you learn all the fundamentals of Swift Concurrency and migrate your projects smoothly to Swift 6 strict concurrency checking. It can be intimidating to start migrating existing projects to Swift 6 and learn about async/await, sendable, and actors simultaneously. A graceful learning process can ...
Default Actor Isolation in Swift 6.2
Default Actor Isolation in Swift 6.2 allows you to run code on the @MainActor by default. This new Swift compiler setting helps improve the approachability of data-race safety, which was set as a goal for the Swift team in their February 2025 vision document. While new projects are set to ...
@concurrent explained with code examples
Swift 6.2 introduced many changes during WWDC 2025, including a new @concurrent attribute we need when working with Swift Concurrency. You might have read that we'll be able to @MainActor all the things now, which also means we need a way out of the @MainActor for asynchronous functions. For the ...
Swift 6.2: A first look at how it’s changing Concurrency
Swift 6.2 is the upcoming release of Apple's native language. It's currently in active development, and as you know from my weekly Swift Evolution updates, many proposals are currently being processed. While many of you usually await a new Xcode release before jumping into new changes, I think knowing what's ...
What is Structured Concurrency?
When we talk about Swift Concurrency, we also often mention Structured Concurrency. It's a fundamental part of async/await in Swift and helps us understand how Swift's latest improvements in concurrency work. Before async/await, we wrote our asynchronous methods using closures and Grand Central Dispatch (GCD). This worked well but often ...
Task.sleep() vs. Task.yield(): The differences explained
In Swift Concurrency, we can use Task.sleep() and Task.yield() to let a specific task sleep or yield for a period of time. Both look and behave similarly, but there are a few significant differences to be aware of as Swift developers. Knowing these differences allows you to better understand when ...