这个库为 SwiftUI 应用程序提供了一个异步图像加载解决方案。 它支持加载多种图像分辨率,并自动处理基于可用空间显示最合适的图像。 该库使用 Swift 的并发模型,包括 Actor 和 Task,来高效地管理图像下载。
将以下依赖项添加到您的 Package.swift
文件中
dependencies: [
.package(url: "https://github.com/YourGitHubUsername/AsyncMultiplexImage.git", from: "1.0.0")
]
import AsyncMultiplexImage
AsyncMultiplexImageNuke(image: .init(constant: URL(...)))
import AsyncMultiplexImage
MultiplexImage
,其中包含一个唯一标识符和一个返回不同图像分辨率 URL 列表的闭包let multiplexImage = MultiplexImage(identifier: "imageID", urlsProvider: { _ in
[URL(string: "https://example.com/image_small.png")!,
URL(string: "https://example.com/image_medium.png")!,
URL(string: "https://example.com/image_large.png")!]
})
MultiplexImage
和符合 AsyncMultiplexImageDownloader
的自定义下载器创建一个 AsyncMultiplexImage
视图struct MyImageView: View {
let multiplexImage: MultiplexImage
let downloader: MyImageDownloader
var body: some View {
AsyncMultiplexImage(multiplexImage: multiplexImage, downloader: downloader) { phase in
switch phase {
case .empty:
ProgressView()
case .progress(let image):
image.resizable()
case .success(let image):
image.resizable()
case .failure(let error):
Text("Error: \(error.localizedDescription)")
}
}
}
}
AsyncMultiplexImageDownloader
的自定义图像下载器class MyImageDownloader: AsyncMultiplexImageDownloader {
func download(candidate: AsyncMultiplexImageCandidate) async throws -> Image {
// Download the image and return a SwiftUI.Image instance
}
}
该库在 MIT 许可证下可用。 有关更多信息,请参阅 LICENSE 文件。