Alamofire:response流程及序列化

前言:在Swift慢慢趨向于穩(wěn)定且高效的時候憨琳,OC也隨著時間一點(diǎn)點(diǎn)的消逝椎侠,曾經(jīng)的諸多OC框架也都投向了Swift的懷抱姿染,而Swift對于框架的提升也逐漸的展露頭腳伐憾。

Alamofire作為AFNetworking的升級版勉痴,在網(wǎng)絡(luò)請求的框架中有著非常眾多的使用者,所以今天就來學(xué)習(xí)Alamofire框架中的response流程和常見的多表單上傳树肃。

response流程

response在Alamofire中扮演了什么角色蒸矛?

response直譯過來是反應(yīng)、響應(yīng)的胸嘴。在普通網(wǎng)絡(luò)請求中雏掠,我們是通過閉包或者代理方法來獲得數(shù)據(jù)請求請求的,這里來看一段普通請求的代碼劣像。

這是一段最簡單的請求乡话,沒有頭文件的設(shè)置。在閉包中返回了data耳奕,response绑青,error三個參數(shù)。那這里的response是什么呢屋群?

這里通過打印可以看到NSHTTPURLResponse的類闸婴,其實主體就是兩個字典,而NSHTTPURLResponse是繼承自NSURLResponse的類芍躏,屬性是來自于NSURLResponse邪乍。

response在這里是作為保存Url、請求的狀態(tài)和請求的頭信息存在的对竣,那Alamofire是否是同樣的作用呢庇楞?


AF和Session.default是同樣的作用

追溯源碼開始

這里直接創(chuàng)建了response,是一個DataResponse柏肪,那這個DataResponse是不是在閉包中獲取到的呢姐刁,暫時還不得而知。這里先來看一下DataResponse是什么烦味。

這是一個保存信息的結(jié)構(gòu)體聂使。什么方法也沒有壁拉,聲明了一堆的屬性“匕校回頭看創(chuàng)建的response弃理,此時是保存信息。

保存的是什么信息呢屎蜓,這里self.request痘昌,self.response,self.data炬转,self.metrics辆苔,以及result都是什么呢?這里的self 指向了DataRequest扼劈,同樣來到DataRequest中

DataRequest類中只有一個data驻啤,來自于mutableData,其他的屬性呢荐吵?看繼承的關(guān)系骑冗,只能去DataRequest的父類中去尋找。在Request類中找到了其他的的屬性先煎。數(shù)據(jù)太多贼涩,這里就不截圖了∈硇可以看到一點(diǎn)的是遥倦,不管是data還是其他的屬性都是在這里聲明的。

看到這里似乎有一點(diǎn)明白了占锯,response是一個響應(yīng)的存儲類谊迄,保存了我們的url,返回的data烟央,以及error等屬性。


再接著向下走

-> self.eventMonitor?.request(self, didParseResponse: response)

肯定是看最后一個request的方法

這個時候肯定是需要了解清楚這個eventMonitor是什么

源碼中很清晰歪脏,這里是一個協(xié)議疑俭,定義了很多的方法。只需要找到是誰實現(xiàn)的這個協(xié)議就清楚了request方法究竟做了什么婿失。


再次跳轉(zhuǎn)钞艇,可以看到這個eventMonitor? 被添加進(jìn)入了一個monitors的數(shù)組中,這下就明白了豪硅,這個request的方法是監(jiān)控回調(diào)的哩照。

這里很清楚的看到并沒有使用session的閉包請求,那么請求的回調(diào)一定是發(fā)生在代理中的懒浮。

最開始的ruqest方法已經(jīng)開始了請求飘弧,那么就需要在URLSessionDataDelegate實現(xiàn)的代理中找到回調(diào)的方法

在這里我們就將請求到的數(shù)據(jù)寫入了對應(yīng)的response中去了识藤。

當(dāng)然在這里還沒有結(jié)束->??self.responseSerializerDidComplete 這一句就是將閉包追加到請求的狀態(tài)中。

當(dāng)請求成功的時候?qū)⒄埱蟮臓顟B(tài)修改為isFinished次伶,然后調(diào)用對應(yīng)外界的回調(diào)閉包痴昧,將請求的數(shù)據(jù)及請求的狀態(tài)以及請求的參數(shù)打包整理好的response,通過閉包回調(diào)出去冠王。

總結(jié)一下:Alamofire 采用了將請求和參數(shù)以及回調(diào)的閉包封裝為成為一個新的DataResponse赶撰,然后通過監(jiān)聽URLSessionDataDelegate代理中回調(diào)的方法,獲取到請求成功或失敗的數(shù)據(jù)柱彻,再將其添加到DataResponse中豪娜,最后通過保存的閉包將其返回,完成一個閉包返回所有數(shù)據(jù)的功能哟楷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瘤载,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吓蘑,更是在濱河造成了極大的恐慌惕虑,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磨镶,死亡現(xiàn)場離奇詭異溃蔫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)琳猫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門伟叛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脐嫂,你說我怎么就攤上這事统刮。” “怎么了账千?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵侥蒙,是天一觀的道長。 經(jīng)常有香客問我匀奏,道長鞭衩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任娃善,我火速辦了婚禮论衍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘聚磺。我一直安慰自己坯台,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布瘫寝。 她就那樣靜靜地躺著蜒蕾,像睡著了一般稠炬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滥搭,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天酸纲,我揣著相機(jī)與錄音,去河邊找鬼瑟匆。 笑死闽坡,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的愁溜。 我是一名探鬼主播疾嗅,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼冕象!你這毒婦竟也來了代承?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤渐扮,失蹤者是張志新(化名)和其女友劉穎论悴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墓律,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膀估,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了耻讽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片察纯。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖针肥,靈堂內(nèi)的尸體忽然破棺而出饼记,到底是詐尸還是另有隱情,我是刑警寧澤慰枕,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布具则,位于F島的核電站,受9級特大地震影響具帮,放射性物質(zhì)發(fā)生泄漏乡洼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一匕坯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拔稳,春花似錦葛峻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽礁遵。三九已至,卻和暖如春采记,著一層夾襖步出監(jiān)牢的瞬間佣耐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工唧龄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兼砖,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓既棺,卻偏偏與公主長得像讽挟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子丸冕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容