RxSwift框架對網(wǎng)絡(luò)請求也是幫我們進(jìn)行了封裝,方便我們在實(shí)際應(yīng)用中快速使用图张,這次主要介紹下相關(guān)網(wǎng)絡(luò)請求方法使用
在 swift 環(huán)境下開發(fā),網(wǎng)絡(luò)請求框架最知名就是 Alamofire 馏慨,AFN網(wǎng)絡(luò)請求框架 swift 版本埂淮。其強(qiáng)大的功能和多種自定義網(wǎng)絡(luò)請求,方便性不言而喻写隶。首先來看下在 RxSwift 框架中倔撞,其本身也給我們進(jìn)行的網(wǎng)絡(luò)請求的封裝。如果是在簡單的網(wǎng)絡(luò)請求環(huán)境下慕趴,可以利用 RxSwift 框架提供的方法來快速實(shí)現(xiàn)網(wǎng)絡(luò)請求響應(yīng)痪蝇。
RxSwift框架中,將 URLSession 進(jìn)行了封裝冕房,在 URLSession+Rx.swift
文件下躏啰,可以找到 RxSwift 為我們提供了四種方法
從上往下,首先是
response
方法
func requestResponse() -> Void {
let url = URL(string: urlString)
URLSession.shared.rx.response(request: URLRequest(url: url!))
.subscribe(onNext: { (response, data) in
print("response ==== \(response)")
print("data ===== \(data)")
}, onError: { (error) in
}).disposed(by: disposeBg)
}
關(guān)于 response
方法耙册,測試打印后给僵,發(fā)現(xiàn)其返回給我們的是,關(guān)于請求的頭部信息以及 data 大小详拙,并沒有我們想要拿到的返回?cái)?shù)據(jù)
data
方法
func requestData() -> Void {
let url = URL(string: urlString)
URLSession.shared.rx.data(request: URLRequest(url: url!))
.subscribe(onNext: { (data) in
print("data ==== \(data)")
}, onError: { (error) in
}).disposed(by: disposeBg)
}
打印結(jié)果也僅僅是返回了數(shù)據(jù)的大小帝际,也沒有我們想要的數(shù)據(jù)
最后來看下
json
方法
func requestJson() -> Void {
let url = URL(string: urlString)
URLSession.shared.rx.json(url: url!)
.subscribe(onNext: { (data) in
print("data === \(data)")
}, onError: { (error) in
}).disposed(by: disposeBg)
}
打印測試結(jié)果
從 json 方法中終于拿到了我們想要的 json 數(shù)據(jù)串
接下來,就是需要我們將 json 轉(zhuǎn)換成模型饶辙,最常用的第三方框架就是 ObjectMapper GitHub鏈接
除了 RxSwift 框架自帶的網(wǎng)絡(luò)請求方法之外蹲诀,通常在項(xiàng)目中大部分是使用 Alamofire 請求框架封裝后專門用于提供給 RxSwift 框架的 Moya 。
基于 RxSwift + Moya + ObjectMapper 的綜合使用弃揽,搭建 MVVM框架脯爪,推薦看下LiuXunFeng 博客的 RxSwift 項(xiàng)目實(shí)戰(zhàn)则北,里面有許多值得學(xué)習(xí)的技巧
該文章首次發(fā)表在 簡書:我只不過是出來寫寫代碼 博客,并自動同步至 騰訊云:我只不過是出來寫寫iOS 博客