RxSwift框架對網絡請求也是幫我們進行了封裝,方便我們在實際應用中快速使用,這次主要介紹下相關網絡請求方法使用
在 swift 環境下開發,網絡請求框架最知名就是 Alamofire ,AFN網絡請求框架 swift 版本。其強大的功能和多種自定義網絡請求,方便性不言而喻。首先來看下在 RxSwift 框架中,其本身也給我們進行的網絡請求的封裝。如果是在簡單的網絡請求環境下,可以利用 RxSwift 框架提供的方法來快速實現網絡請求響應。
RxSwift框架中,將 URLSession 進行了封裝,在 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)
}
關于 response
方法,測試打印后,發現其返回給我們的是,關于請求的頭部信息以及 data 大小,并沒有我們想要拿到的返回數據
response方法返回結果
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)
}
打印結果也僅僅是返回了數據的大小,也沒有我們想要的數據
data方法返回結果
最后來看下
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)
}
打印測試結果
json方法返回結果
從 json 方法中終于拿到了我們想要的 json 數據串
接下來,就是需要我們將 json 轉換成模型,最常用的第三方框架就是 ObjectMapper GitHub鏈接
除了 RxSwift 框架自帶的網絡請求方法之外,通常在項目中大部分是使用 Alamofire 請求框架封裝后專門用于提供給 RxSwift 框架的 Moya 。
基于 RxSwift + Moya + ObjectMapper 的綜合使用,搭建 MVVM框架,推薦看下LiuXunFeng 博客的 RxSwift 項目實戰,里面有許多值得學習的技巧
該文章首次發表在 簡書:我只不過是出來寫寫代碼 博客,并自動同步至 騰訊云:我只不過是出來寫寫iOS 博客