一圖簡(jiǎn)單了解URLSession,所有的網(wǎng)絡(luò)請(qǐng)求任務(wù)都是由URLSession創(chuàng)建并掛起

思路圖晚點(diǎn)補(bǔ)上,先上代碼
下載管理器代碼
class?DownLoadManager:NSObject{
? ? static let instance: DownLoadManager = DownLoadManager()
? ? /// 單例
? ? ///
? ? /// -Returns: 返回對(duì)象本身
? ? class?func?sharedManager() ->DownLoadManager{
? ? ? ? return?instance
? ? }
? ? /// 存儲(chǔ)下載任務(wù)
? ? lazy?var?downLoadCache:Dictionary = {
? ? ? ? let?dic =Dictionary()
? ? ? ? return?dic
? ? }()
?? /// 根據(jù)URL下載任務(wù)
?? ///
?? /// - Parameters:
?? ///? - url: 鏈接
?? ///? - progress: 進(jìn)度
?? ///? - compelete: 完成回調(diào)
?? ///? - faile: 失敗回調(diào)
?? func?downLoadFile(withUrl url:String,progress:@escaping(_progress:Float)->Void,compelete:@escaping(_filePath:String)->Void,faile:@escaping(_error:String)->Void) ->Void{
? ? let?downLoadHepler =downLoadCache[url]
? ? if?downLoadHepler !=nil?{
? ? ? ? debugPrint("此任務(wù)下載中。。。")
? ? }else{
? ? ? ? let?downLoadHepler =DownLoaderHepler()
? ? ? ? downLoadCache[url] = downLoadHepler
? ? ? ? downLoadHepler.downLoadFile(withUrl: url, progress: progress, compelete: { (filePath)?in
? ? ? ? ? ? self.downLoadCache.removeValue(forKey: url)
? ? ? ? ? ? compelete(filePath)
? ? ? ? }, faile: faile)
? ? }
? ? }
? ? /// 暫停
? ? ///
? ? /// -Parameterurl: 鏈接
? ? func?pasume(withUrl url:String) ->Void{
? ? ? ? let?downLoadHepler =downLoadCache[url]
? ? ? ? if?downLoadHepler !=nil?{
? ? ? ? ? ? downLoadHepler?.pasume()
? ? ? ? }else{
? ? ? ? ? ? debugPrint("此任務(wù)不存在\(url)")
? ? ? ? }
? ? }
? ? /// 繼續(xù)
? ? ///
? ? /// -Parameterurl: 繼續(xù)鏈接
? ? func?resume(withUrl url:String) ->Void{
? ? ? ? let?downLoadHepler =downLoadCache[url]
? ? ? ? if?downLoadHepler !=nil{
? ? ? ? ? ? downLoadHepler?.resume()
? ? ? ? }else{
? ? ? ? ? ? debugPrint("此任務(wù)不存在\(url)")
? ? ? ? }
? ? }
}
DownLoadManager下載代碼
class?DownLoadManager:NSObject{
? ? static let instance: DownLoadManager = DownLoadManager()
? ? /// 單例
? ? ///
? ? /// -Returns: 返回對(duì)象本身
? ? class?funcsharedManager() ->DownLoadManager{
? ? ? ? return?instance
? ? }
? ? /// 存儲(chǔ)下載任務(wù)
? ? lazy?var?downLoadCache:Dictionary = {
? ? ? ? let?dic =Dictionary()
? ? ? ? return?dic
? ? }()
?? /// 根據(jù)URL下載任務(wù)
?? ///
?? /// - Parameters:
?? ///? - url: 鏈接
?? ///? - progress: 進(jìn)度
?? ///? - compelete: 完成回調(diào)
?? ///? - faile: 失敗回調(diào)
?? func?downLoadFile(withUrl url:String,progress:@escaping(_progress:Float)->Void,compelete:@escaping(_filePath:String)->Void,faile:@escaping(_error:String)->Void) ->Void{
? ? let?downLoadHepler =downLoadCache[url]
? ? if?downLoadHepler !=nil{
? ? ? ? debugPrint("此任務(wù)下載中。。。")
? ? }else{
? ? ? ? let?downLoadHepler =DownLoaderHepler()
? ? ? ? downLoadCache[url] = downLoadHepler
? ? ? ? downLoadHepler.downLoadFile(withUrl: url, progress: progress, compelete: { (filePath)in
? ? ? ? ? ? self.downLoadCache.removeValue(forKey: url)
? ? ? ? ? ? compelete(filePath)
? ? ? ? }, faile: faile)
? ? }
? ? }
? ? /// 暫停
? ? ///
? ? /// -Parameterurl: 鏈接
? ? func?pasume(withUrl url:String) ->Void{
? ? ? ? let?downLoadHepler =downLoadCache[url]
? ? ? ? if?downLoadHepler !=nil{
? ? ? ? ? ? downLoadHepler?.pasume()
? ? ? ? }else{
? ? ? ? ? ? debugPrint("此任務(wù)不存在\(url)")
? ? ? ? }
? ? }
? ? /// 繼續(xù)
? ? ///
? ? /// -Parameterurl: 繼續(xù)鏈接
? ? func?resume(withUrl url:String) ->Void{
? ? ? ? let?downLoadHepler =downLoadCache[url]
? ? ? ? if?downLoadHepler !=nil{
? ? ? ? ? ? downLoadHepler?.resume()
? ? ? ? }else{
? ? ? ? ? ? debugPrint("此任務(wù)不存在\(url)")
? ? ? ? }
? ? }
}