Alamofire 源碼學(xué)習(xí)(一)- Alamofire 一瞥

關(guān)于 Alamofire

如果你曾經(jīng)用 Objective-C 開發(fā)過 iOS 應(yīng)用程序滑黔,那么你一定不會對 AFNetworking 這個(gè)第三方庫感到陌生总寻。AFNetworking 作為常用的網(wǎng)絡(luò)請求庫辫红,以其簡潔和優(yōu)雅的特性系吭,廣受 iOS 應(yīng)用開發(fā)者贊譽(yù)啡直。自從 Swift 編程語言在一夜之間占領(lǐng)全世界之后箫柳,AFNetworking 的作者 Mattt Thompson 又馬不停蹄地發(fā)起了一個(gè)基于 Swift 的網(wǎng)絡(luò)請求庫讼育,這便是 Alamofire帐姻。Alamofire 并非是 AFNetworking 的 Swift 翻版,而是一個(gè)全新的項(xiàng)目奶段。這個(gè)庫秉承了作者一貫的高質(zhì)量饥瓷,截至今天,其在 Github 上面已經(jīng)收獲了接近 18000 個(gè) star痹籍。Alamofire 的代碼干凈呢铆、清晰,而且總量還不到 1000 行蹲缠,非常適合作為示例進(jìn)行學(xué)習(xí)刺洒。通過對該庫的學(xué)習(xí),我們將:1. 了解 Swift 的常用編程范式以及編程技巧吼砂;2. 了解 Apple 的 URL Loading System逆航。

本文介紹了一些簡單的用法示例,借此管窺 Alamofire 的特性渔肩。

一個(gè) GET 請求

Alamofire 的接口使用起來非常簡單因俐,比如,你可以這樣發(fā)送一個(gè) GET 請求:

Alamofire.request(.GET, "http://httpbin.org/get")
         .response { (request, response, data, error) in
             print(data)
          }

解析返回值

默認(rèn)情況下,你會在 response 閉包中得到一個(gè) NSData 對象抹剩。如果你希望得到字符串對象撑帖,可以使用 responseString:

Alamofire.request(.GET, "http://httpbin.org/get")
         .responseString { (request, response, string, error) in
             print(string)
         }

同樣,你也可以得到 JSON 對象:

Alamofire.request(.GET, "http://httpbin.org/get")
          .responseJSON {(request, response, JSON, error) in
              print(JSON)
          }

進(jìn)度監(jiān)聽

你可以提供一個(gè) progress 閉包澳眷,用以監(jiān)聽請求的進(jìn)度:

Alamofire.upload(.POST, "https://httpbin.org/post", file: fileURL)
         .progress { bytesWritten, totalBytesWritten, totalBytesExpectedToWrite in
             print(totalBytesWritten)
 
             // This closure is NOT called on the main queue for performance
             // reasons. To update your ui, dispatch to the main queue.
             dispatch_async(dispatch_get_main_queue()) {
                 print("Total bytes written on main queue: \(totalBytesWritten)")
             }
          }
          .responseJSON { response in
              print(response)
          }

鏈?zhǔn)秸{(diào)用

得益于 Swift 提供的語法支持胡嘿,Alamofire 提供的鏈?zhǔn)秸{(diào)用機(jī)制令網(wǎng)絡(luò)請求十分簡潔與直觀:

Alamofire.request(.GET, "http://httpbin.org/get")
         .authenticate(HTTPBasic: user, password: password)
         .progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in
             print(totalBytesRead)
         }
         .validate()
         .responseJSON { (request, response, JSON, error) in
             print(JSON)
         }
         .responseString { (request, response, string, error) in
             print(string)
         }

將請求轉(zhuǎn)為等效的 cURL 命令

有時(shí)候你可能需要使用 curl 命令對網(wǎng)絡(luò)請求進(jìn)行調(diào)試。Alamofire 幫你把請求轉(zhuǎn)換為等效的 curl 命令:

let request = Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
debugPrint(request)

這將得到如下輸出:

$ curl -i \
       -H "User-Agent: Alamofire" \
       -H "Accept-Encoding: Accept-Encoding: gzip;q=1.0,compress;q=0.5" \
       -H "Accept-Language: en;q=1.0,fr;q=0.9,de;q=0.8,zh-Hans;q=0.7,zh-Hant;q=0.6,ja;q=0.5" \
       "https://httpbin.org/get?foo=bar"

參考

(未完)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钳踊,一起剝皮案震驚了整個(gè)濱河市衷敌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拓瞪,老刑警劉巖缴罗,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異祭埂,居然都是意外死亡面氓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門蛆橡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舌界,“玉大人,你說我怎么就攤上這事泰演≠骱幔” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵粥血,是天一觀的道長。 經(jīng)常有香客問我酿箭,道長复亏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任缭嫡,我火速辦了婚禮缔御,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妇蛀。我一直安慰自己耕突,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布评架。 她就那樣靜靜地躺著眷茁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纵诞。 梳的紋絲不亂的頭發(fā)上上祈,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼登刺。 笑死籽腕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的纸俭。 我是一名探鬼主播皇耗,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼揍很!你這毒婦竟也來了郎楼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤女轿,失蹤者是張志新(化名)和其女友劉穎箭启,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛉迹,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡傅寡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了北救。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荐操。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖珍策,靈堂內(nèi)的尸體忽然破棺而出托启,到底是詐尸還是另有隱情,我是刑警寧澤攘宙,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布屯耸,位于F島的核電站,受9級特大地震影響蹭劈,放射性物質(zhì)發(fā)生泄漏疗绣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一铺韧、第九天 我趴在偏房一處隱蔽的房頂上張望多矮。 院中可真熱鬧,春花似錦哈打、人聲如沸塔逃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽湾盗。三九已至,卻和暖如春立轧,著一層夾襖步出監(jiān)牢的瞬間淹仑,已是汗流浹背丙挽。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匀借,地道東北人颜阐。 一個(gè)月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像吓肋,于是被迫代替她去往敵國和親凳怨。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫是鬼、插件肤舞、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,094評論 4 62
  • 【香知蜜讀593】2017/07/30星期日 薦書蜜友:劉芹 文:佚名 縱觀世界各種大學(xué)的排行榜,可以清晰的發(fā)現(xiàn)所...
    自律時(shí)光閱讀 687評論 0 0
  • GitHub地址 一個(gè)自定義的ActionSheetView,支持顯示標(biāo)題均蜜,默認(rèn)選中李剖,使用block回調(diào)。 使用說...
    findM閱讀 1,700評論 4 50
  • 南方的雨不像北方那樣囤耳,會給路人留一份準(zhǔn)備的時(shí)間篙顺,南方的雨是你看到黑云壓來欲打傘,最后卻在還未撐開之際被淋的像...
    我叫王粒粒閱讀 525評論 0 0
  • 安裝 Ubuntu下安裝常規(guī)軟件都比較簡單充择,直接使用apt-get即可德玫。安裝步驟如下: 輸入mysql命令 系統(tǒng)會...
    天花板閱讀 15,810評論 0 17