如要查看完整代码,请移步仿煎蛋github
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 ,对请求开始,请求中,请求结束的处理