Wesley de Groot's Blog
Enhancing SwiftUI with CachedAsyncImage

Back

In the world of mobile app development, performance and user experience are paramount.
One common challenge developers face is efficiently loading and caching images.
Enter CachedAsyncImage, a Swift Package designed to simplify this process.
Let's dive into what makes CachedAsyncImage a valuable tool for iOS and macOS developers.

What is CachedAsyncImage?

CachedAsyncImage is a Swift Package that extends the capabilities of SwiftUI's AsyncImage by adding caching functionality. This means that images loaded from the web can be stored locally, reducing the need for repeated network requests and improving app performance.

Key Features

  1. Asynchronous Image Loading: Just like AsyncImage, CachedAsyncImage loads images asynchronously, ensuring that your app's UI remains responsive.
  2. Built-in Caching: By default, CachedAsyncImage uses URLCache.shared to store images. This can be customized to use different caching mechanisms if needed.
  3. Simple Integration: Integrating CachedAsyncImage into your project is straightforward. You can add it as a dependency in your Package.swift file and start using it with minimal setup¹.

How to Use CachedAsyncImage

Using CachedAsyncImage is as simple as replacing AsyncImage with CachedAsyncImage in your SwiftUI views.
Here’s a quick example:

import SwiftUI
import CachedAsyncImage

struct ContentView: View {
    var body: some View {
        VStack {
            CachedAsyncImage(
                url: URL(
                    string: "https://wesleydegroot.nl/assets/avatar/avatar.webp"
                )
            ) { image in
                image
                    .resizable()
                    .frame(width: 250, height: 250)
            } placeholder: {
                ProgressView()
            }
        }
        .padding()
    }
}

Or a more advanced example:

import CachedAsyncImage

struct ContentView: View {
    let imageURL = URL(string: "https://wesleydegroot.nl/assets/avatar/avatar.webp")!

    var body: some View {
        CachedAsyncImage(url: imageURL) { phase in
            switch phase {
            case .empty:
                ProgressView()
            case .success(let image):
                image
                    .resizable()
                    .aspectRatio(contentMode: .fit)
            case .failure:
                Image(systemName: "photo")
            @unknown default:
                EmptyView()
            }
        }
        .frame(width: 100, height: 100)
    }
}

In this example, CachedAsyncImage handles the image loading and caching seamlessly.
The phase parameter allows you to manage different states (loading, success, failure) effectively.

Benefits of Using CachedAsyncImage

  • Improved Performance: By caching images, you reduce the number of network requests, leading to faster load times and a smoother user experience.
  • Reduced Data Usage: Caching images locally means less data is consumed, which is beneficial for users on limited data plans.
  • Enhanced User Experience: With faster image loading times, users are less likely to experience delays or interruptions while using your app.

Conclusion

CachedAsyncImage is a powerful tool for any SwiftUI developer looking to enhance their app's performance and user experience. By integrating this package, you can ensure that images are loaded efficiently and cached effectively, providing a seamless experience for your users.

For more details and to get started with CachedAsyncImage, visit the GitHub repository.

Thanks

CachedAsyncImage is based on swiftui-cached-async-image.

Read more

Share


Share Mastodon Twitter LinkedIn Facebook
x-twitter mastodon github linkedin discord threads instagram whatsapp bluesky square-rss sitemap