FireCache
一个 Swift 网络库
FireCache 是一个在 Swift 中通过 HTTP 获取和缓存图片、JSON、字符串的网络库,它灵活且可扩展到自定义类型。
特性
- 内存缓存。
- 非阻塞 I/O。所有 HTTP 和 I/O 都在后台执行。
- 完全泛型。
- 为 UIImageView 添加远程图片的简单扩展方法。
- 健壮、快速和高度可定制。
- 简单、易于理解且简洁的代码库。
- 智能处理重复的图片请求。
要求
至少需要 iOS 8 或更高版本。
安装
CocoaPods
FireCache需要CocoaPods 1.1.x或更高版本。
FireCache可以通过CocoaPods获取。CocoaPods安装,只需在Podfile中添加以下行:
pod 'FireCache'
示例
首先导入框架。
import FireCache
导入后,就可以开始请求图像了。
//you can simply call the URL string on your UIImageView
let imageUrl = URL(string: "https://www.example.com/sample.png")!
let imageView = UIImageView(frame: CGRectMake(0, 0, 200, 200))
self.imageView.setImage(with: imageUrl)
//Fetch image using the FireCache Image Manager
FireImageManager.shared.fetch(with: url) { (image, url, error) in
//Returns `url`
//Returns either of `image` or `error`
}
使用FireCache下载JSON
使用默认JSON管理器。
FireJSONManager.shared.fetch(with: url) { (json, url, error) in
//Returns `url`
//Returns either of `json` or `error`
}
取消请求
在需要时可以取消获取的请求。这会导致回调被调用并抛出错误,错误代码为NSURLErrorCancelled
。
let downloadTask = self.imageView.setImage(with: imageUrl)
downloadTask?.cancel()
使用FireManager下载自定义类型
您可以使用FireCache为缓存创建自己的类型。让我们以新的类型ZIP
为例。
//Extend you type with `Cacheable` protocol
extension ZIP: Cacheable {
public typealias Object = ZIP
public static func convertFromData(_ data: Data) throws -> ZIP {
guard let zip = ZIP(data: data) else { throw FireError.invalidData }
return zip
}
}
let fireZIPManager = FireManager<ZIP>()
fireZIPManager.fetch(with: url) { (zip, url, error) in
//Returns `url`
//Returns either of `zip` or `error`
}
优先处理任务
let task1 = fireManager.fetch(with: url) { (file, url, error) in }
let task2 = fireManager.fetch(with: url) { (file, url, error) in }
let task3 = fireManager.fetch(with: url) { (file, url, error) in }
task1?.priority = 0.2
task2?.priority = 0.5
task3?.priority = 1.0
许可
FireCache 采用 MIT 开源许可证。
联系
Jitendra Gandhi
一个不成熟的程序员
- http://itsji10dra.com/
- https://github.com/itsji10dra
- http://twitter.com/itsji10dra
- https://www.linkedin.com/in/itsji10dra/
- https://stackoverflow.com/users/story/2713079/
在 Beerpay 上支持
嘿,兄弟!帮帮我几个