Skip to content

Jonhory/JHNetwork

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

47 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Swift5网络层封装

导航

介绍:

  • 使用Swift5,基于Alamofire5.6.4+Codable封装的网络中间层,提供快速缓存策略,帮助日常开发。

  • 实现了GET/POST请求JSON数据,可定义每一个请求是否缓存成功的回调数据。

  • 利用请求的url拼接传入的参数字典,形成唯一性的字符串,经过SHA256加密后保存至Library/Caches/JHNetworkCaches文件夹,该路径可自行修改。

  • 当调用一个请求方法时,会经过以下逻辑判断处理:

    1. 判断shoulObtainLocalWhenUnconnected(网络异常时是否返回缓存数据)

    2. 判断当前networkStatus(当前网络状态)为unknownnotReachable

    3. 同时满足1、2点,尝试获取缓存,若有缓存,则返回成功的回调

    4. 判断refreshCache(是否刷新缓存)

    5. 若第5点为否,则尝试获取缓存,若有缓存,则返回成功的回调

    6. 正式开始发起网络请求

    7. 成功回调的处理,利用Alamofire responseDecodable解析

      • 如果refreshCache(是否刷新缓存)且isCache(是否缓存),则缓存回调数据
      • 返回成功的回调
    8. 失败回调的处理

      • 如果error.code < 0isCache,尝试获取缓存,若有缓存,则返回成功的回调
      • 返回失败的回调

快速接入:

  • JHNetwork.swift拖入项目中
  • pod导入
pod 'Alamofire', '~> 5.6.4'
  • 在项目的Build Settings里配置Swift Compiler - Custom Flags,展开Other Swift Flags,在Debug右侧输入-D DEBUG

代码示例:

  • 新建Model类,继承 Codable修改为继承BaseResp即可

  • 代码中有 codeHandler字段,data.code != 200 && data.code != 1里的代码实现部分可根据实际情况调整

  • 如果想在网络状态异常时返回缓存数据,可以在AppDelegate.swift中设置

JHNetwork.shared.shoulObtainLocalWhenUnconnected(shouldObtain: true)
  • GET请求,默认缓存
//刷新缓存
getForJSON(url:finished:)
//可带参数,刷新缓存
getForJSON(url:parameters:finished:)
//可设置是否刷新缓存
getForJSON(url:refreshCache:parameters:finished:)
  • GET请求,默认不缓存
getNoCacheForJSON(url:finished:)
getNoCacheForJSON(url:parameters:finished:)
getNoCacheForJSON(url:refreshCache:parameters:finished:)
  • POST请求,默认缓存
postForJSON(url:finished:)
postForJSON(url:parameters:finished:)
postForJSON(url:refreshCache:parameters:finished:)
  • POST请求,默认不缓存
postNoCacheForJSON(url:finished:)
postNoCacheForJSON(url:parameters:finished:)
postNoCacheForJSON(url:refreshCache:parameters:finished:)
  • 最底层的请求方法
/// 请求JSON数据最底层
///
/// - Parameters:
///   - methodType: GET/POST
///   - urlStr: 接口
///   - refreshCache: 是否刷新缓存,如果为false则返回缓存
///   - isCache: 是否缓存
///   - parameters: 参数字典
///   - finished: 回调
requestJSON(methodType:urlStr:refreshCache:isCache:parameters:finished:)

  • 上传图片数组
/// 上传图片数组
///
/// - Parameters:
///   - par: key是 images ,value是 UIImage
///   - urlStr: 上传路径
///   - finished: 回调
upload(par: [String: Any] , urlStr: String, finished: @escaping networkJSON)
  • 每个请求都返回Cancellable?,可调用cancel()方法取消该请求

  • 尝试获取指定url和参数的缓存

getCacheForJSON(url:parameters:finished:)
  • 获取当前网络数据缓存字节数
totalCacheSize()
  • 清除缓存
clearCaches()

感谢

联系我

  • 如果在使用过程中遇到问题,或者想要与我分享,吐槽我 jonhory@163.com

License

  • JHNetwork is released under the MIT license. See LICENSE for details.

About

Swift 5 Alamofire 5.6.4

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages