NetworkImage

CI

NetworkImage 是一个 Swift 包,为您的 SwiftUI 应用程序提供图像下载、缓存和显示功能。 它利用了 Foundation 的 URLCacheNSCache,提供持久性和内存缓存。

浏览配套演示项目,以了解其功能。

最低要求

您可以在以下平台上使用 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()

安装

将 NetworkImage 添加到 Swift 包

要在 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 添加到您的源代码中。

将 NetworkImage 添加到 Xcode 项目

  1. 文件菜单中,选择添加包…
  2. 搜索或输入包 URL 搜索字段中输入 https://github.com/gonzalezreal/NetworkImage
  3. NetworkImage 链接到您的应用程序目标