适用于 SwiftUI 的 AsyncMultiplexImage

这个库为 SwiftUI 应用程序提供了一个异步图像加载解决方案。 它支持加载多种图像分辨率,并自动处理基于可用空间显示最合适的图像。 该库使用 Swift 的并发模型,包括 Actor 和 Task,来高效地管理图像下载。

特性

安装

Swift Package Manager

将以下依赖项添加到您的 Package.swift 文件中

dependencies: [
    .package(url: "https://github.com/YourGitHubUsername/AsyncMultiplexImage.git", from: "1.0.0")
]

入门

import AsyncMultiplexImage

AsyncMultiplexImageNuke(image: .init(constant: URL(...)))

用法

  1. 导入库
import AsyncMultiplexImage
  1. 定义一个 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")!]
})
  1. 使用 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)")
            }
        }
    }
}
  1. 实现一个符合 AsyncMultiplexImageDownloader 的自定义图像下载器
class MyImageDownloader: AsyncMultiplexImageDownloader {
    func download(candidate: AsyncMultiplexImageCandidate) async throws -> Image {
        // Download the image and return a SwiftUI.Image instance
    }
}

许可

该库在 MIT 许可证下可用。 有关更多信息,请参阅 LICENSE 文件。