Understanding Swift's Async/Await Feature

A portrait painting style image of a pirate holding an iPhone.

by The Captain

on
April 15, 2023

Understanding Swift's Async/Await Feature

Swift 5.5 introduced the long-awaited async/await feature, which brings a new level of concurrency to iOS and macOS development. The feature allows developers to write asynchronous code in a more structured, predictable and simpler way. This tutorial will cover the basics of async/await and show you how to use it in your projects.

What is Async/Await?

Async/await is a programming feature that simplifies the process of writing asynchronous code. In the past, to perform a task asynchronously, you needed to use callbacks, completion handlers, or closures. This could lead to verbose and hard-to-understand code, also known as "callback hell". With async/await, you can write asynchronous code in a synchronous-looking style, without blocking the main thread.

How Does Async/Await Work?

Async/await works by introducing two new keywords to Swift; “async” and “await.” The “async” keyword is used to define a function or block of code that can run asynchronously. The “await” keyword is used to pause the execution of the current function until a task is completed. By using these two keywords, you can write asynchronous code that looks like synchronous code.

Async/Await Example

Let's take a look at an example of how you can use async/await to perform a network request:

func fetchUserData() async throws -> UserData {
    let url = URL(string: "https://jsonplaceholder.typicode.com/users")!
    let request = URLRequest(url: url)
    let (data, _) = try await URLSession.shared.data(for: request)
    return try JSONDecoder().decode(UserData.self, from: data)
}

In the code above, we define a function "fetchUserData" that can be executed asynchronously using the async keyword. We then create a request, perform a network call using the shared URLSession, and wait for the response using the await keyword. Once the response is received, we decode the JSON data using the JSONDecoder class and return the UserData object.

Conclusion

Async/await is a powerful feature that simplifies the process of writing asynchronous code in Swift. By using the async and await keywords, you can write asynchronous code that is easier to read, write and understand. It is important to note that async/await is only available in Swift 5.5 or newer.