iOS一行代码搞定网络请求(AFNetWorking结合ReactiveCocoa)(3)

如要查看完整代码,请移步仿煎蛋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 ,对请求开始,请求中,请求结束的处理
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值