- 对Alamofire与Cache的封装实现对网络数据的缓存,可以存储JSON、String、Data,接口简单明了.
- 封装Alamofire下载,使用更方便.
- 如有问题,欢迎提出,不足之处,欢迎纠正,欢迎star ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
- Github: github.com/MQZHot/Dais…
缓存.gif
1. 请求+缓存
- 缓存数据只需要调用
.cache(true)
,不调用或者.cache(false)
则不缓存 - 调用
responseCacheAndString
可以先读取缓存数据,再读取网络数据 通过
isCacheData
属性可以区分缓存数据还是网络数据DaisyNet.request(url, params: params).cache(true).responseCacheAndJson { value in switch value.result { case .success(let json): if value.isCacheData { print("我是缓存的") } else { print("我是网络的") } case .failure(let error): print(error) } }复制代码
你也可以分别读取缓存数据和网络数据,如下代码
- 调用
cacheJson
方法获取缓存数据,调用responseJson
获取网络数据
DaisyNet.request(url, params: params).cache(true).cacheJson { json in
print("我是缓存的")
}.responseJson { response in
print("我是网络的")
}复制代码
如果你不需要缓存,可以直接调用
responseJson
方法DaisyNet.request(url).responseString { response in switch response { case .success(let value): print(value) case .failure(let error): print(error) } }复制代码
同理,如果你要缓存
Data
或者String
,与JSON
是相似的/// 先读取缓存,再读取网络数据 DaisyNet.request(url).cache(true).responseCacheAndString { value in } DaisyNet.request(url).cache(true).responseCacheAndData { value in }复制代码
/// 分别获取缓存和网络数据 DaisyNet.request(url).cache(true).cacheString { string in print("我是缓存的") }.responseString { response in print("我是网络的") }复制代码
取消请求
DaisyNet.cancel(url, params: params)复制代码
清除缓存
/// 清除所有缓存 func removeAllCache(completion: @escaping (Bool)->()) /// 根据url和params清除缓存 func removeObjectCache(_ url: String, params: [String: Any]? = nil, completion: @escaping (Bool)->())复制代码
2. 下载
思路:
- 1.下载中的任务,用url作为key添加到DownloadManager单例中
- 2.取消任务、删除任务以及下载失败时,将下载任务从单例中删除,保证- DownloadManager单例的downloadTasks中是正在下载的
- 3.暂停下载,保存已经下载的data到plist文件
DaisyNet.download(url).downloadProgress { progress in /// 下载进度 }.response { response in /// 下载完成 }复制代码
- 如果正在下载中退出当前界面,再次进入时可以通过以下方法获取下载进度,并改变UI
DaisyNet.downloadProgress(url) { print($0) }?.response(completion: { _ in print("下载完成") })复制代码
获取下载状态
DaisyNet.downloadStatus(url)复制代码
获取下载百分比
DaisyNet.downloadPercent(url)复制代码
获取下载完成后文件所在位置
DDaisyNet.downloadFilePath(url)复制代码
删除某个下载
DaisyNet.downloadDelete(url)复制代码
取消某个下载
DaisyNet.downloadCancel(url)复制代码