背景:
? ? ? ? ?項(xiàng)目里的發(fā)布圖文的一個(gè)需求,在點(diǎn)擊完發(fā)布按鈕后發(fā)布過(guò)程中,取消當(dāng)前發(fā)布內(nèi)容。項(xiàng)目使用網(wǎng)絡(luò)請(qǐng)求是Alamofire框架,在Alamofire的基礎(chǔ)上用RXSwift寫(xiě)了一套網(wǎng)絡(luò)管理工具?;鶎宇怭rovider。因?yàn)槊總€(gè)網(wǎng)絡(luò)請(qǐng)求都是有一個(gè)sessionManage來(lái)管理,先創(chuàng)建requestData,然后檢查各種param,處理block,token等,再resume開(kāi)啟這個(gè)請(qǐng)求,然后這個(gè)請(qǐng)求就作為一個(gè)task由sessionManager管理,因此可以拿到sessionManager就可以找到對(duì)應(yīng)的task,來(lái)取消網(wǎng)絡(luò)請(qǐng)求。
實(shí)現(xiàn):
注意:要拿到當(dāng)前網(wǎng)絡(luò)的sessionManager
? ? ///取消當(dāng)前sessionManager下所有的請(qǐng)求
? ? func cancleAllRequest() -> () {
? ? ? ? manager.session.getAllTasks{ (urlSessionTask)in
? ? ? ? ? ? urlSessionTask.forEach({ (task)in
? ? ? ? ? ? ? ? task.cancel()
? ? ? ? ? ? })
? ? ? ? }
? ? }
? ? ///取消當(dāng)前sessionManager下某個(gè)請(qǐng)求
? ? func cancleRequest(path:String) -> () {
? ? ? ? manager.session.getAllTasks{ (urlSessionTask)in
? ? ? ? ? ? urlSessionTask.forEach({ (task)in
?? ? ? ? ? ? ? ?iftask.currentRequest?.url?.path== path {
? ? ? ? ? ? ? ? ? ? task.cancel()
? ? ? ? ? ? ? ? }
? ? ? ? ? ? })
?? ? ? ?}
? ? }