国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

詳解Swift 利用Opration和OprationQueue來下載網絡圖片

2019-10-21 18:44:38
字體:
來源:轉載
供稿:網友

詳解Swift 利用Opration和OprationQueue來下載網絡圖片

1. 基于Opration封裝的獲取網絡數據組件

import Foundation import UIKit  public typealias OpreationClosure = ((_ data:Data? , _ error: Error?) -> Void)  class LJOpreationManager: Operation {      /**    * 下載用的url    */   public var imageUrl : String?      /**    * 定義閉包屬性,可選類型    */   public var ljcallBackClosure : OpreationClosure?      func initWitParamter(_ url: String, _ callback: @escaping OpreationClosure) -> LJOpreationManager {          if url != ""     {       self.imageUrl = url       self.ljcallBackClosure = callback     }     return self   }      //MARK: -- start   override func start() {          print("start ljManager method")     self.startRequest()   }      func startRequest()   {     //1、創建URL下載地址     let url:URL! = URL(string:self.imageUrl!);          //2、創建Request對象     var urlRequest:URLRequest = URLRequest(url:url);     urlRequest.httpMethod = "GET"     urlRequest.httpShouldUsePipelining = true;          //不需要緩存     //urlRequest.cachePolicy = .reloadIgnoringLocalCacheData          //3、創建會話     let config = URLSessionConfiguration.default     let session = URLSession(configuration: config, delegate:self, delegateQueue: .main)          //4、下載任務     //2>-- -- URLSessionDataDelegate 模式     let loadDataTask = session.dataTask(with: urlRequest)          //5、啟動任務     loadDataTask.resume()   }      //初始化一個data,用來存儲下載下來的數據   private var _responseData: NSMutableData!   var responseData: NSMutableData!{     get{       if _responseData == nil {         _responseData = NSMutableData()       }       return _responseData     }     set{       self._responseData = newValue     }   } }  // MARK - URLSessionDataDelegate 模式獲取數據 extension LJOpreationManager:URLSessionDataDelegate {   @available(iOS 7.0, *)   func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Swift.Void)   {     //允許繼續加載數據     completionHandler(.allow)   }      @available(iOS 7.0, *)   func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data)   {     //每次獲取的data在此拼裝     //print("Data....../(data)")     self.responseData.append(data)          let currentBytes :Float = Float(self.responseData.length)     let allTotalBytes :Float = Float((dataTask.response?.expectedContentLength)!)          let proValu :Float = Float(currentBytes/allTotalBytes)     print("URLSessionDataDelegate----下載進度:------/(proValu*100)%");   }      func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?)   {     if ljcallBackClosure != nil ,let data = self.responseData{              weak var weakSelf : LJOpreationManager? = self       DispatchQueue.main.async         {           print("URLSessionDataDelegate----數據下載完畢")           //將接收的數據結果回調到前臺,用于進度展示           weakSelf?.ljcallBackClosure!(data as Data ,nil)       }     }   } } 

2. 基于OprationQueue封裝的網絡數據管理組件

import Foundation  class LJWebImageManager: NSObject {      /// Shared manager used .   public static let shared = LJWebImageManager()   public var ljquee = OperationQueue()      override init() {     if #available(iOS 8.0, *) {       self.ljquee.qualityOfService = .background     } else {     }   }      public func requestByUrl(_ url: String,_ callback: @escaping OpreationClosure) -> LJOpreationManager {     let operation = LJOpreationManager().initWitParamter(url, callback)     ljquee.addOperation(operation)          return operation   } } 

3. 此處下載一張圖片

func setCellData(_ labelNameStr:String, imageUrlStr:String) {   titleLabel.text = labelNameStr as String   /* Session 的delegate模式下載圖片或者數據*/   _ = LJWebImageManager.shared.requestByUrl(imageUrlStr, { (data, error) in          if error == nil, data != nil {       let newImage = UIImage(data: data! as Data)              DispatchQueue.main.async{         let titleImage = UIImageView(frame: CGRect(x: 0, y: 5, width: 40, height: 40))         titleImage.image = newImage         self.contentView.addSubview(titleImage)       }     }     else     {       print(error ?? "")     }   }) } 

 

Swift,下載網絡圖片,利用Opration和OprationQueue下載網絡圖片

如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石狮市| 东至县| 全椒县| 万山特区| 神农架林区| 金堂县| 连州市| 肃宁县| 丰都县| 湾仔区| 浑源县| 尤溪县| 翼城县| 桦川县| 湖口县| 金山区| 宿州市| 晋宁县| 鸡西市| 博白县| 大姚县| 东平县| 故城县| 磐安县| 论坛| 凉城县| 仙桃市| 丹寨县| 澳门| 陵水| 尤溪县| 盘山县| 手机| 施甸县| 许昌县| 于都县| 广平县| 类乌齐县| 崇义县| 梁山县| 内黄县|