iOS一行程式碼搞定網路請求(AFNetWorking結合ReactiveCocoa)(3)
阿新 • • 發佈:2019-02-04
1、響應式封裝網路請求的優點
- 統一處理(返回結果解析的統一處理,錯誤的統一處理)
- 對網路異常情況的提前處理,和請求後的統一處理
- 使用RACSignal的各種操作符,例如fiter,map,flatternMap,merge等,滿足各種需求
- 程式碼更簡練優雅
2、網路監聽
- 實時監聽
[[[AFNetWorkUtils sharedAFNetWorkUtils] startMonitoringNet] subscribeNext:^(NSString *netStatus) {
//此處為每當網路狀態改變時,自動呼叫,返回結果:1、WIFI 2、2G/3G/4G 3、網路已斷開 4,其他情況 四種情況
}];
- 獲得當前的網路狀態
[AFNetWorkUtils sharedAFNetWorkUtils].netType;
放回結果是一個列舉
typedef NS_ENUM(NSInteger, NetType) {
NONet,
WiFiNet,
OtherNet,
};
3、 get請求
[[AFNetWorkUtils get2racWthURL:url] subscribeNext:^(id result) {
//成功返回(result class is NSDictionary )
} error:^(NSError *error) {
//錯誤處理
}];
[[AFNetWorkUtils racGETWithURL:url class:Weather.class] subscribeNext:^(id result) {
//直接獲得模型物件(result class is NSObject or NSArray)
} error:^(NSError *error) {
//錯誤處理
}];
4、post請求
[[AFNetWorkUtils racPOSTWthURL:url params:params] subscribeNext:^(id result) {
//成功返回(result class is NSDictionary)
} error:^(NSError *error) {
//錯誤處理
}];
[[AFNetWorkUtils racPOSTWithURL:url params:params class:Weather.class] subscribeNext:^(id result) {
//直接獲得模型物件(result class is NSObject or NSArray)
} error:^(NSError *error) {
//錯誤處理
}];
5、獲取非JSON 資料(例如String型別資料)
[[AFNetWorkUtils get2racUNJSONWthURL:unJSONUrl] subscribeNext:^(NSData *result) {
//返回結果為NSData 型別
}];
6、返回結果解析的統一處理,錯誤的統一處理
如果伺服器返回的資料,都有固定的格式,如果在工具類進行統一的解析,就不用再每次網路請求時都去解析一次了。
例如
{
"status": "ok",
"id": 2774402,
result:{
},
}
或者
{
"status": "ok",
"id": 2774402,
result:[
],
}
或者
{
"status": "error",
"error": "Post ID '61355' not found."
}
則可直接獲取result結果,或者錯誤資訊。
7、對網路請求的各種需求(ReactiveCocoa方式的解決方案)
同步的兩次網路請求,即上一次的網路請求結果,是下一次網路請求的引數。
例如authToken失效了,先去請求authToken,才能進行當前的請求(Flatternmap
[AFNetWorkUtils racGETWthURL:getAuthTokenURL] flattenMap:^RACStream *(NSString* authToken) {
return [AFNetWorkUtils racGETWthURL:nowURL];
};
兩個網路請求一步執行,但需要結果統一的處理
例如,新聞類APP,都是先載入快取資料,再載入網路資料,兩個請 求結果都要載入到UITableView上。
[RACSignal merge:@[dbSignal, netSignal]];
- 對請求的過濾(filter)
- 對返回結果的二次處理(map)
- 副作用(doNext)
- 配合RACComand ,對請求開始,請求中,請求結束的處理