0
0
Ios-swiftHow-ToBeginner ยท 4 min read

How to Use Async Await for Networking in Swift

In Swift, use async functions combined with await to perform networking calls asynchronously. This lets you write clear, linear code that waits for network responses without blocking the main thread.
๐Ÿ“

Syntax

The async keyword marks a function that performs asynchronous work. Inside it, use await before calling another async function to pause execution until the result is ready. This pattern helps handle network calls cleanly.

  • async func: Declares an asynchronous function.
  • await: Waits for an async call to finish.
  • throws: Indicates the function can throw errors, useful for network failures.
swift
func fetchData() async throws -> Data {
  let url = URL(string: "https://example.com/data.json")!
  let (data, _) = try await URLSession.shared.data(from: url)
  return data
}
๐Ÿ’ป

Example

This example shows how to fetch JSON data from a URL using async await. It prints the data size or an error message.

swift
import Foundation

@main
struct MyApp {
  static func main() async {
    do {
      let data = try await fetchData()
      print("Data received: \(data.count) bytes")
    } catch {
      print("Failed to fetch data: \(error)")
    }
  }

  static func fetchData() async throws -> Data {
    let url = URL(string: "https://jsonplaceholder.typicode.com/todos/1")!
    let (data, _) = try await URLSession.shared.data(from: url)
    return data
  }
}
Output
Data received: 83 bytes
โš ๏ธ

Common Pitfalls

Common mistakes include calling async functions without await, blocking the main thread by using synchronous calls, or not handling errors properly.

For example, calling fetchData() without await will not wait for the network response and cause a compile error.

swift
/* Wrong way - missing await */
// let data = try fetchData() // Error: Call to async function in a synchronous context

/* Right way */
// let data = try await fetchData()
๐Ÿ“Š

Quick Reference

  • Use async to mark functions that perform asynchronous tasks.
  • Use await to pause execution until the async call completes.
  • Handle errors with try and catch.
  • Use URLSession.shared.data(from:) with await for simple network requests.
โœ…

Key Takeaways

Use async functions with await to write clear asynchronous networking code in Swift.
Always mark functions with async and call async functions with await.
Handle errors using try and catch to manage network failures gracefully.
Avoid blocking the main thread by never using synchronous network calls in UI code.
Use URLSession's async methods for simple and efficient network requests.