Swift - Alamofire與Cache封裝實現網路快取、下載

MQZHot發表於2017-10-18
  • AlamofireCache的封裝實現對網路資料的快取,可以儲存JSON、String、Data,介面簡單明瞭.
  • 封裝Alamofire下載,使用更方便.
  • 如有問題,歡迎提出,不足之處,歡迎糾正,歡迎star ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
  • Github: github.com/MQZHot/Dais…
    快取.gif
    快取.gif

下載.gif
下載.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)複製程式碼

相關文章