MVDownloader 0.1.2

MVDownloader 0.1.2

Manase Michael 维护。



  • Manase Michael Mhando

MVDownloader

Build Status Pod Version Pod Platform Pod License Repo Size

MVDownloader 是一个用于从网络异步远程请求下载图片或 JSON 格式文件的本地 Swift 库。

特性

  • 异步图片下载和缓存。
  • 支持并行远程请求和缓存 URL 响应
  • 可取消下载并重新使用先前的请求中的 resume 数据
  • 从缓存中获取图片以提高性能和体验
  • 设置图片时内置过渡动画
  • 支持图片占位符
  • 保证相同的 URL 请求不会多次触发
  • 自定义缓存控制和配置
  • 保证无效的 URL 不会被触发
  • 保证主线程不会被阻塞
  • 扩展 UIImageView 并公开可用的方法,支持快速下载图片
  • 多个资源访问同一资源将备份相同的响应
  • 支持从 JSON 对象解码数据类型实例
  • 底层使用 GRC

示例

要运行示例项目,请克隆仓库,然后首先从 Example 目录运行 pod install

要求

  • iOS 10.0+
  • Xcode 10.0+
  • Swift 5.0+

依赖项

安装

MVDownloader可通过CocoaPods使用。要安装它,只需将以下行添加到Podfile中

platform :ios, '10.0'
use_frameworks!
pod 'MVDownloader'

使用说明

共享实例

MVDownloader有一个共享实例,可用于访问所有公开的API方法。

import MVDownloader 

MVDownloader.shared

默认情况下,库将缓存所有给定URL请求的响应,并使用NSCache对象提供高达80 mb的内存空间。您可以通过使用定义的缓存初始化MVDownloader.init(urlCache:_)来配置具有不同存储容量的自定义NSCache对象。

下载图片

使用库下载图片可以像提供适当的URL请求到requestImage(from:_, comepletion:_)方法一样简单,并接管下载和将响应数据转换为MVImage(一种UIImage类型)的过程。

import MVDownloader 

let url = URL(string:"https://techcrunch.com/wp-content/uploads/2015/04/codecode.jpg?w=1390&crop=1")!

MVDownloader.shared.requestImage(from: url) { (mvimage, error) in
    
    if let downloadedImage = mvimage {
       print("Downloaded image: ", downloadedImage)
    }
    
}

此外,还有一个简单的方法快速下载图片,而无需编写较长的代码块。查看mv_setImage示例。

使用mv_setImage下载图片

MVDownloader库在底层扩展了UIImageView,并公开了mv_setUmage(from:_)方法,旨在自动下载图片并应用动画过渡。

import MVDownloader

guard let url = URL(string:"https://techcrunch.com/wp-content/uploads/2015/04/codecode.jpg?w=1390&crop=1") else {
    print("Given url is invalid")
    return 
}

let imageView = UIImageView()

// Downloads image and sets it automatically 
imageView.mv_setImage(from: url) { (error) in 
  ...
}  

下载JSON

可以从JSON对象中平滑地解码特定类型的实例,通过利用的 ~ requestDecodable(type:_,from:)方法执行。

import MVDownloader

/// A type that can convert itself into and out of an external representation.
public struct PhotoModel: Codable {
    var urls: PhotoUrls
}

public struct PhotoUrls: Codable {
    var raw: String
    var full: String
    var regular: String
    var small: String
    var thumb: String
}


guard let pasteBinUrl =
URL(string:"https://images.unsplash.com/photo-1464550883968-cec281c19761?ixlib=rb-0.3.5&q=80&fm=jpg&crop=entropy&w=400&fit=max&s=d5682032c546a3520465f2965cde1cec") else {
print("Given url is invalid")
return 
}

/// By default, below function utilises `JSONDecoder` object to decode instances of a data type from JSON objects.  

MVDownloader.shared.requestDecodable(type: [PhotoModel].self, from: pasteBinUrl) { (data, error) in

    ...
    // Proceed with data extraction 
    ...
}

正常远程请求

此库的另一好处是,它不仅限于下载JSON和图片。您还可以继续发出正常的网络请求。

import MVDownloader 

let url = URL(string: "www.google.com")!
let urlRequest = URLRequest(url: url)

MVDownloader.shared.request(urlRequest) { (data, error) in
    ...
    // Process response data 
    ...
}

取消活动请求

活动远程请求可以取消并从活动下载任务集合列表中完全删除。

import MVDownloader 

let url = URL(string: "www.google.com")!
let urlRequest = URLRequest(url: url)

let downloader = MVDownloader.shared 

// Active request on progress 
downloader.request(urlRequest) { (data, error) in 
    ...
    // Proceed with data extraction
    ...
}


// Cancelling active request using there associated `URL` request 
let requestDidCancel = downloader.cancelRequest(for: url)

// Check if request is successfully cancelled 
if requestDidCancel {
    ...
}

清除缓存

可以通过简单地调用以下方法clearAllCache(),轻松清除整个缓存。

 MVDownloader.shared.clearAllCache()

可以通过以下方法清除缓存中的特定请求:

guard let url = URL(string:"https://techcrunch.com/wp-content/uploads/2015/04/codecode.jpg?w=1390&crop=1") else {
    print("Given url is invalid")
    return 
}

MVDownloader.shared.clearCache(for: url)

作者

Manase Michael, [email protected]

许可

MVDownloader 在 MIT 许可下可用。更多信息请参阅 LICENSE 文件。