SuhyNetWorker 1.5.6

SuhyNetWorker 1.5.6

Alucardulad 维护。



 
依赖
Cache= 6.0.0
Alamofire= 5.6.4
CleanJSON= 1.0.9
 

  • alucardulad

SuhyNetWorker

AlamofireCache的封装实现,可对网络数据进行缓存,并通过协议优雅地调用网络模块,支持存储 JSON、String、Data。

使用说明

1. 网络请求

注意:如果你的参数中包含时间戳、token 等可变参数,这些参数需要写入dynamicParams参数中,以免无法读取缓存

func request(
    _ url: String,
    method: HTTPMethod = .get,
    params: Parameters? = nil,
    dynamicParams: Parameters? = nil,
    encoding: ParameterEncoding = URLEncoding.default,
    headers: HTTPHeaders? = nil)
    -> RequestTaskManager
  • 要缓存数据,只需调用.cache(true),如果不调用或者调用.cache(false),则不缓存
  • 调用responseCacheAndString可以先读取缓存数据,再读取网络数据
  • 通过isCacheData属性可以区分缓存数据还是网络数据
SuhyNetWorker.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获取网络数据
SuhyNetWorker.request(url, params: params).cache(true).cacheJson { json in
        print("我是缓存的")
    }.responseJson { response in
    print("我是网络的")
}
  • 如果你不需要缓存,可以直接调用responseJson方法
SuhyNetWorker.request(url).responseString { response in
    switch response {
    case .success(let value): print(value)
    case .failure(let error): print(error)
    }
}
  • 同样,如果你要缓存DataString,与JSON的操作类似
/// 先读取缓存,再读取网络数据
SuhyNetWorker.request(url).cache(true).responseCacheAndString { value in }
SuhyNetWorker.request(url).cache(true).responseCacheAndData { value in }
/// 分别获取缓存和网络数据
SuhyNetWorker.request(url).cache(true).cacheString { string in
        print("我是缓存的")
    }.responseString { response in
    print("我是网络的")
}
  • 取消请求
SuhyNetWorker.cancel(url, params: params)
  • 清除缓存
/// 清除所有缓存
func removeAllCache(completion: @escaping (Bool)->())
/// 根据url和params清除缓存
func removeObjectCache(_ url: String, params: [String: Any]? = nil, completion: @escaping (Bool)->())

2. 下载

SuhyNetWorker.download(url).downloadProgress { progress in
        /// 下载进度
    }.response { response in
    /// 下载完成
}
  • 如果正在下载中退出当前界面,再次进入时可以通过以下方法获取下载进度,并改变UI
SuhyNetWorker.downloadProgress(url) {
        print($0)
    }?.response(completion: { _ in
    print("下载完成")
})
  • 获取下载状态
SuhyNetWorker.downloadStatus(url)
  • 获取下载百分比
SuhyNetWorker.downloadPercent(url)
  • 获取下载完成后文件所在位置
DSuhyNetWorker.downloadFilePath(url)
  • 删除某个下载
SuhyNetWorker.downloadDelete(url)
  • 取消某个下载
SuhyNetWorker.downloadCancel(url)
  • 取消所有下载
SuhyNetWorker.downloadCancelAll()

3.SuhyNetWorkerProtocol协议:协议封装网络请求

  • SuhyNetWorkerProtocol协议
protocol SuhyNetWorkerProtocol {
    var baseUrl:String! { get } //根节点
    var url:String! { get }//子节点
    var apiType:HTTPMethod! { get }
    var params:[String: AnyObject]! { get }
    var headParams:HTTPHeaders! { get }
    var dynamicParams:[String: AnyObject]! { get }//可忽略的参数
    var isNeedCache:Bool! { get }//是否启用缓存策略
    var encoding:ParameterEncoding! { get }//转码格式
}
  • 请求方法
func requestAPIModel(api:SuhyNetWorkerProtocol,finishedCallback:@escaping (SuhyValue<Any>)->())
  • 实现SuhyNetWorkerProtocol后,封装方法函数
  • 调用requestAPIModel可以实现如moya一样的网络封装。
  • 通过SuhyNetWorkerProtocol协议,可以让你只关心调用协议。把网络层交给自定义的APIModel本身。

安装

1.pod 'SuhyNetWorker'

2.pod install / pod update

许可协议

SuhyNetWorker采用MIT许可协议发布。详情见许可协议