NetworkImage 是一个 Swift 包,为您的 SwiftUI 应用程序提供图像下载、缓存和显示功能。 它利用了 Foundation 的 URLCache
和 NSCache
,提供持久性和内存缓存。
浏览配套演示项目,以了解其功能。
您可以在以下平台上使用 NetworkImage
NetworkImage 从给定的 URL 下载并显示图像;下载是异步的,结果缓存在磁盘和内存中。
创建 NetworkImage
视图的最简单方法是将图像 URL 传递给 init(url:scale:)
初始化器。
NetworkImage(url: URL(string: "https://picsum.photos/id/237/300/200"))
.frame(width: 300, height: 200)
要操作加载的图像,请使用 content
参数。
NetworkImage(url: URL(string: "https://picsum.photos/id/237/300/200")) { image in
image
.resizable()
.scaledToFill()
.blur(radius: 4)
}
.frame(width: 150, height: 150)
.clipped()
该视图会显示一个标准的占位符,该占位符会填充可用空间,直到图像加载完成。 您可以使用 placeholder
参数指定自定义占位符。
NetworkImage(url: URL(string: "https://picsum.photos/id/237/300/200")) { image in
image
.resizable()
.scaledToFill()
} placeholder: {
ZStack {
Color.secondary.opacity(0.25)
Image(systemName: "photo.fill")
.imageScale(.large)
.blendMode(.overlay)
}
}
.frame(width: 150, height: 150)
.clipped()
要更好地控制图像加载过程,请使用 init(url:scale:transaction:content)
初始化器,该初始化器接受一个 content
闭包,该闭包接收一个 NetworkImageState
来指示加载操作的状态。
NetworkImage(url: URL(string: "https://picsum.photos/id/237/300/200")) { state in
switch state {
case .empty:
ProgressView()
case .success(let image, let idealSize):
image
.resizable()
.scaledToFill()
case .failure:
Image(systemName: "photo.fill")
.imageScale(.large)
.blendMode(.overlay)
}
}
.frame(width: 150, height: 150)
.background(Color.secondary.opacity(0.25))
.clipped()
要在 Swift Package Manager 项目中使用 NetworkImage,请将以下行添加到 Package.swift
文件中的依赖项
.package(url: "https://github.com/gonzalezreal/NetworkImage", from: "6.0.0")
将 "NetworkImage"
作为可执行目标的依赖项包含进来
.target(name: "<target>", dependencies: [
.product(name: "NetworkImage", package: "NetworkImage")
]),
最后,将 import NetworkImage
添加到您的源代码中。
https://github.com/gonzalezreal/NetworkImage