SDDownloadManager 2.0.0

SDDownloadManager 2.0.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布最后发布2024年7月
SPM支持 SPM

Sagar 维护。



  • 作者
  • Sagar Dagdu

SDDownloadManager

alt text

一个简单的、健壮的 iOS (Swift 4) 下载管理器,基于 URLSession,用于处理异步下载和管理多个文件。

由于没有使用 Swift 和基于新 URLSession API 的开源项目,所以产生了编写另一个下载管理器库的想法。

SDDownloadManager 利用 URLSessionURLSessionDownloadTask 的强大功能,使得文件的下载和进度跟踪变得轻而易举。最初受到 TWRDownloadManager (https://github.com/chasseurmic/TWRDownloadManager) 的启发


安装库

要使用此库,只需将依赖项添加到 Podfile

platform :ios
pod 'SDDownloadManager'

运行 pod install 以安装依赖项。

用法

SDDownloadManager 提供以下任务的 API

  • 将多个文件异步下载到指定目录。
  • 使用闭包语法跟踪下载进度和完成,无需实现代理!

下载文件

public func dowloadFile(withRequest request: URLRequest,
                        inDirectory directory: String? = nil,
                        withName fileName: String? = nil,
                        onProgress progressBlock:DownloadProgressBlock? = nil,
                        onCompletion completionBlock:@escaping DownloadCompletionBlock) -> String? 

参数

  • request : 代表可下载资源的 URLRequest 对象。

  • directory : 代表应用缓存目录中的子目录名称。

下载的所有文件将是从设备的 /tmp 目录移至缓存目录。这样做有两个原因:

  1. /tmp 目录可以偶尔清理,以确保任何部分下载、取消或失败的下载都能被适当处理,并且不会占用设备和iTunes备份的空间。
  2. 默认情况下,缓存的目录不与用户iCloud文档同步。这是遵守苹果关于内容的规定,这些内容不是针对特定用户的,因此可以从互联网重新下载,并且不应与iCloud同步。

如果提供了目录名,则将在缓存目录中创建一个新子目录。

  • fileName : 一旦文件下载完成,如果用户提供了 fileName,则将使用该名称将文件存储在最终目的地。如果没有提供名称,则管理器将使用响应参数中提供的建议文件名称或URL字符串的最后一个路径分量(例如,对于 http://www.example.com/files/my_image.jpg,最终的文件名将是 my_image.jpg)。

  • progressBlock : 当下载进度更新时,回调一个从0到1.0的 CGFloat 值。

  • completionBlock : 回调两个参数 errorfileUrl

    • 如果下载成功,fileUrl 代表文件的URL。可以通过此URL访问文件。
    • 如果下载失败,error 代表在下载过程中发生的错误。

返回

  • 此方法返回一个与该下载调用唯一的密钥。理想情况下,键可以稍后用于取消下载或修改特定下载的进度块。如果已存在与指定的urlrequest相同的下载,此方法将返回 nil

检查当前下载

要检查文件是否正在下载,您可以使用以下方法之一

public func isDownloadInProgress(forKey key:String?) -> Bool

获取所有正在进行的下载

public func currentDownloads() -> [String]

修改正在进行的下载的块

public func alterBlocksForOngoingDownload(withUniqueKey key:String?,
                                 setProgress progressBlock:DownloadProgressBlock?,
                                 setCompletion completionBlock:@escaping DownloadCompletionBlock)

取消下载

取消所有下载

public func cancelAllDownloads()

取消特定下载

public func cancelDownload(forUniqueKey key:String?)

要求

SDDownloadManager 需要 iOS 9.x 或更高版本。

未来增强

我计划在未来的版本中整合以下功能

  • 后台下载。
  • 可恢复下载。
  • 一个更好的、整洁的示例项目,包含更多的演示。(如果那些真正在使用它的那些人能提供一些帮助就太好了!)

许可证

使用受MIT 许可证管理。有关详细信息,请参阅 LICENSE。

贡献

欢迎所有贡献。请fork项目以添加功能,并通过提交pull request在下一版本中合并它们。