Alamofire從基礎(chǔ)到進(jìn)階 小技巧(二)

Alamofire
Version:4.5.1
Swift Version: 4.0.3

Podfiles

# Uncomment the next line to define a global platform for your proje
platform :ios, '8.0'
target 'UseageAlamofire' do
  use_frameworks!
  pod 'Alamofire'
end

目錄:
Alamofire從基礎(chǔ)到進(jìn)階 基礎(chǔ)請求與響應(yīng)(一)
Alamofire從基礎(chǔ)到進(jìn)階 小技巧(二)

鏈?zhǔn)巾憫?yīng)處理

Alamofire的響應(yīng)處理是鏈?zhǔn)降模驗(yàn)楫?dāng)你request一個請求的時候,它返回的是一個DataRequest的,所以你可以使用點(diǎn)語法再次進(jìn)行序列化操作,具體我們看一下代碼:

let url = "http://httpbin.org/get"
Alamofire.request(url)
    .responseData(completionHandler:  { response in
        print("response.result.value data")
        print(response.result.value)
    })
    .responseJSON(completionHandler: { response in
        print("response.result.value json")
        print(response.result.value)
    })

當(dāng)我們使用鏈?zhǔn)巾憫?yīng)處理的兩次序列化的時候,實(shí)際上Alamofire只請求了一次服務(wù)器,但是對請求的數(shù)據(jù)進(jìn)行了兩次序列化操作,所以我們可以得到兩次次回調(diào)結(jié)果,神奇吧。

可自定義響應(yīng)隊(duì)列

Alamofire的響應(yīng)處理默認(rèn)是在主線程進(jìn)行的序列化操作,它也提供了我們一個參數(shù)可以進(jìn)行自定義隊(duì)列操作,我們看一下代碼:

let queue = DispatchQueue.global()
Alamofire.request(url).responseJSON(queue: queue, completionHandler: { response in
    print("response.result.value qos")
    print(response.result.value)
})

我們定義了DispatchQueue.global()就會改變Alamofire在主線程中進(jìn)行的序列化,從而從我們的自定義線程中進(jìn)行序列化操作。

自定義超時時間

我們在做應(yīng)用的時候,當(dāng)我們從服務(wù)器請求數(shù)據(jù)的時候避免不了的要讓用戶等待一段時間,Alamofire為我們提供了 30秒的超時時間,當(dāng)然我們也可以進(jìn)行手動更改:

let url2 = URL(string: "http://httpbin.org/gzip")
var urlReuquest = URLRequest(url: url2!)
urlReuquest.timeoutInterval = 1
Alamofire.request(urlReuquest).responseJSON(completionHandler: { response in
    print(response.result.value)
})

我們設(shè)置了超時時間為1秒,所以在1秒內(nèi),沒有收到服務(wù)器的返回,Alamofire就會給我們提供Error code = -1001,就是超時的響應(yīng)。

響應(yīng)處理驗(yàn)證

我們收到服務(wù)器返回的數(shù)據(jù)時候,很多時候我們都沒有提前做過校驗(yàn)就用JSON去進(jìn)行解析,現(xiàn)在我們可以對拿回的數(shù)據(jù)先進(jìn)性校驗(yàn)再做處理,具體可看代碼:

Alamofire.request(url)
    .validate(statusCode: 300..<500)
    .validate(contentType: ["application/json"])
    .responseJSON(completionHandler: { response in
        print("response.result.value validate")
        print(response.result.value)
        print(response.result.error)
    })

Alamofire為我們默認(rèn)的statusCode是200..<300當(dāng)然,我們?yōu)榱搜菔拘r?yàn),所以就用了300..<500,這個時候Alamofire就返回給了我們一個nil。validate(contentType:)為我們校驗(yàn)服務(wù)器返回的是否是application/json的類型。

--以此來記錄 Usage Alamofire ^ _^ --

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Alamofire 是一款 Swift 寫的 HTTP 網(wǎng)絡(luò)請求庫 前言 本篇內(nèi)容為 Alamofire 官方 R...
    zongmumask閱讀 21,234評論 6 66
  • 盡管Alamofire的github文檔已經(jīng)做了很詳細(xì)的說明,我還是想重新梳理一遍它的各種用法,以及這些方法的一些...
    老馬的春天閱讀 16,415評論 28 135
  • Alamofire的基本用法 1.請求 這是一個最簡單的請求,這個請求即不需要參數(shù),也不需要接收數(shù)據(jù)。接下來我們翻...
    水落斜陽閱讀 3,351評論 0 16
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,177評論 4 61
  • 與茶有緣閱讀 212評論 2 7

友情鏈接更多精彩內(nèi)容