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)降牧锍驗楫?dāng)你request一個請求的時候,它返回的是一個DataRequest的,所以你可以使用點語法再次進(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)處理的兩次序列化的時候续崖,實際上Alamofire只請求了一次服務(wù)器者甲,但是對請求的數(shù)據(jù)進(jìn)行了兩次序列化操作,所以我們可以得到兩次次回調(diào)結(jié)果喉钢,神奇吧。
可自定義響應(yīng)隊列
Alamofire的響應(yīng)處理默認(rèn)是在主線程進(jìn)行的序列化操作良姆,它也提供了我們一個參數(shù)可以進(jìn)行自定義隊列操作肠虽,我們看一下代碼:
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)處理驗證
我們收到服務(wù)器返回的數(shù)據(jù)時候叮贩,很多時候我們都沒有提前做過校驗就用JSON去進(jìn)行解析击狮,現(xiàn)在我們可以對拿回的數(shù)據(jù)先進(jì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灹辈唬跃陀昧?00..<500,這個時候Alamofire就返回給了我們一個nil。validate(contentType:)為我們校驗服務(wù)器返回的是否是application/json
的類型杨箭。
--以此來記錄 Usage Alamofire ^ _^ --