Swift - Alamofire與Cache封裝實現網絡緩存、下載

  • AlamofireCache的封裝實現對網絡數據的緩存,能夠存儲JSON、String、Data,接口簡單明瞭.
  • 封裝Alamofire下載,使用更方便.
  • 若有問題,歡迎提出,不足之處,歡迎糾正,歡迎star ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
  • Github: github.com/MQZHot/Dais…
    緩存.gif
    緩存.gif

下載.gif
下載.gif

1. 請求+緩存

  • 緩存數據只須要調用.cache(true),不調用或者.cache(false)則不緩存
  • 調用responseCacheAndString能夠先讀取緩存數據,再讀取網絡數據
  • 經過isCacheData屬性能夠區分緩存數據仍是網絡數據git

    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)
      }
    }複製代碼
  • 你也能夠分別讀取緩存數據和網絡數據,以下代碼github

  • 調用cacheJson方法獲取緩存數據,調用responseJson獲取網絡數據
DaisyNet.request(url, params: params).cache(true).cacheJson { json in
        print("我是緩存的")
    }.responseJson { response in
    print("我是網絡的")
}複製代碼
  • 若是你不須要緩存,能夠直接調用responseJson方法json

    DaisyNet.request(url).responseString { response in
      switch response {
      case .success(let value): print(value)
      case .failure(let error): print(error)
      }
    }複製代碼
  • 同理,若是你要緩存Data或者String,與JSON是類似的swift

    /// 先讀取緩存,再讀取網絡數據
    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("我是網絡的")
    }複製代碼
  • 取消請求api

    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("下載完成")
    })複製代碼
  • 獲取下載狀態ui

    DaisyNet.downloadStatus(url)複製代碼
  • 獲取下載百分比url

    DaisyNet.downloadPercent(url)複製代碼
  • 獲取下載完成後文件所在位置spa

    DDaisyNet.downloadFilePath(url)複製代碼
  • 刪除某個下載

    DaisyNet.downloadDelete(url)複製代碼
  • 取消某個下載

    DaisyNet.downloadCancel(url)複製代碼
相關文章
相關標籤/搜索