Async image loading with progress and cache for SwiftUI.
28
stars
45
commits
Swift
primary language
Jun 25, 2024
updated
Async image loading with progress and cache for SwiftUI.

Going to Xcode File > Add Packages... and add the repository by giving the URL
https://github.com/bullinnyc/CachedAsyncImage
Enjoy!
import CachedAsyncImage
Note: placeholder is an optional parameter.
let exampleUrl = "https://example.com/image.jpg"
CachedAsyncImage(
url: exampleUrl,
placeholder: { progress in
// Create any view for placeholder (optional).
ZStack {
Color.yellow
ProgressView() {
VStack {
Text("Downloading...")
Text("\(progress) %")
}
}
}
},
image: {
// Customize image.
Image(uiImage: $0)
.resizable()
.scaledToFill()
}
)
Note: placeholder and error is an optional parameters.
let exampleUrl = "https://example.com/image.jpg"
CachedAsyncImage(
url: exampleUrl,
placeholder: { progress in
// Create any view for placeholder (optional).
ZStack {
Color.yellow
ProgressView() {
VStack {
Text("Downloading...")
Text("\(progress) %")
}
}
}
},
image: {
// Customize image.
Image(uiImage: $0)
.resizable()
.scaledToFill()
},
error: { error, retry in
// Create any view for error (optional).
ZStack {
Color.yellow
VStack {
Group {
Text("Error:")
.bold()
Text(error)
}
.font(.footnote)
.multilineTextAlignment(.center)
.foregroundStyle(.red)
Button(
action: retry,
label: {
Text("Retry")
.foregroundStyle(.black)
.opacity(0.8)
}
)
.padding(.top)
}
.padding()
}
}
)
Note: The default value is 0, e.g. is no count limit and is no total cost limit.
init() {
// Set image cache limit.
ImageCache().wrappedValue.setCacheLimit(
countLimit: 1000, // 1000 items
totalCostLimit: 1024 * 1024 * 200 // 200 MB
)
}
struct MyView: View {
@ImageCache private var imageCache
var body: some View {
// ...
}
// Get cached image.
private func getCachedImage(for url: URL) -> UIImage? {
imageCache[url]
}
// Remove cached image.
private func removeCachedImage(for url: URL) {
imageCache[url] = nil
}
// Remove image cache.
private func removeImageCache() {
imageCache.removeCache()
}
}
45 commits
Swift
100.0%
Async image loading with progress and cache for SwiftUI.
28
stars
45
commits
Swift
primary language
Jun 25, 2024
updated
Async image loading with progress and cache for SwiftUI.

Going to Xcode File > Add Packages... and add the repository by giving the URL
https://github.com/bullinnyc/CachedAsyncImage
Enjoy!
import CachedAsyncImage
Note: placeholder is an optional parameter.
let exampleUrl = "https://example.com/image.jpg"
CachedAsyncImage(
url: exampleUrl,
placeholder: { progress in
// Create any view for placeholder (optional).
ZStack {
Color.yellow
ProgressView() {
VStack {
Text("Downloading...")
Text("\(progress) %")
}
}
}
},
image: {
// Customize image.
Image(uiImage: $0)
.resizable()
.scaledToFill()
}
)
Note: placeholder and error is an optional parameters.
let exampleUrl = "https://example.com/image.jpg"
CachedAsyncImage(
url: exampleUrl,
placeholder: { progress in
// Create any view for placeholder (optional).
ZStack {
Color.yellow
ProgressView() {
VStack {
Text("Downloading...")
Text("\(progress) %")
}
}
}
},
image: {
// Customize image.
Image(uiImage: $0)
.resizable()
.scaledToFill()
},
error: { error, retry in
// Create any view for error (optional).
ZStack {
Color.yellow
VStack {
Group {
Text("Error:")
.bold()
Text(error)
}
.font(.footnote)
.multilineTextAlignment(.center)
.foregroundStyle(.red)
Button(
action: retry,
label: {
Text("Retry")
.foregroundStyle(.black)
.opacity(0.8)
}
)
.padding(.top)
}
.padding()
}
}
)
Note: The default value is 0, e.g. is no count limit and is no total cost limit.
init() {
// Set image cache limit.
ImageCache().wrappedValue.setCacheLimit(
countLimit: 1000, // 1000 items
totalCostLimit: 1024 * 1024 * 200 // 200 MB
)
}
struct MyView: View {
@ImageCache private var imageCache
var body: some View {
// ...
}
// Get cached image.
private func getCachedImage(for url: URL) -> UIImage? {
imageCache[url]
}
// Remove cached image.
private func removeCachedImage(for url: URL) {
imageCache[url] = nil
}
// Remove image cache.
private func removeImageCache() {
imageCache.removeCache()
}
}
45 commits
Swift
100.0%