博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
论如何巧用链式语法逃出产品和后台魔爪
阅读量:7091 次
发布时间:2019-06-28

本文共 3026 字,大约阅读时间需要 10 分钟。

VicNetRequest

VicNetRequest是一套以链式语法的对AFNetworking的封装框架,改框架有三个可取之处

  • 设计该框架的初衷,是为了对付产品和后台,当你相安无事乐呵呵地度过了每一个轻松的日子,产品突然跑过来说,我们要在每个接口都打印一下版本号!!!(╯‵□′)╯︵┻━┻你为什么不早说,现在都进入迭代了你来告诉我要打印什么版本号???那我岂不是要把所有接口都改一遍?或者发个通知给父类ViewController?可是我好像不是所有的ViewController都继承自父类ViewController,产品你过来,把保证不用键盘砸你 当你辛辛苦苦一个一个接口都复制黏贴好了之后后台跑来说,哎呀我忘记处理了某些东西了,现在你要在收到某个字符串之后让把用户踢下线!!!!(╯‵□′)╯︵┻━┻这活还能不能干了!!!! 痛定思痛,必须要有一个能随时更改,高度容错的框架,嗯,响应式是一个很好的选择,于是VicNetRequest诞生了,从来不造轮子的我终于拿起了自己的锄头o( ̄︶ ̄)o

  • 第二就是容错性高。除了必要的参数在debug的时候会通过断言提示,其他参数都可传可不传,都不影响代码的运行。 以上方法若是换成api集中式的话就会出现牵一发动全身的情况,当你要添加一个Version属性做API版本判断的时候,你能怎么办?只能重写方法,然后所有使用的网络请求都要改变方法。(代码来源网上)

- (void)GET:(NSString *)url        parameters:(id)Parameters        success:(SuccessBlock)success        failure:(FailureBlock)failure;复制代码

本来我只想要发一条最普通的get请求,结果写了这么一大长串是不是很郁闷

[VicNetTools requestWithGetUrl:PBBTokenVerify_URL parameter:@{@"token":token,@"device_id":@(1)} showLoadingView:YES caches:NO cacheResponse:nil success:^(NSDictionary *backDic) {           } fail:^(NSError *error) {            }];复制代码

但是如果用链式语法的话………就像这样

[VicNetRequest shareManager].vic_model.methodBlock(GET).urlBlock(@"http://api.hykpay.com/api/sys/GetApp?apptype=1").showHudBlock(YES).cacheBlock(NO)[VicNetRequest shareManager].vic_model.methodBlock(POST).urlBlock(@"http://api.jinniushuju.com/api/sys/BJTime")复制代码
  • 该框架默认关闭系统自带缓存,使用了更为安全优秀的使用MD5加密的第三方缓存框架,嗯,很安全

用法

日志:2018-03-15 1.0尚未接入HUD,后续会补上,但是在代码内已经写好了,你只需要在if内写入你的HUD代码即可,具体如下(以SVProgressHUD为例)

//开始发送请求前if (isShowLoding==YES) {        [SVProgressHUD show];    }    //收到后台返回数据后if (isShowLoding==YES) {    [SVProgressHUD dismiss];}复制代码
//get缓存请求有菊花但不进行缓存(但实现了缓存block)    [[VicNetRequest shareManager].vic_model.methodBlock(GET).urlBlock(@"http://api.hykpay.com/api/sys/GetApp?apptype=1").showHudBlock(YES).cacheBlock(NO) startRequestWithCache:^(NSDictionary *cacheDic) {    } Success:^(NSDictionary *successDic) {    } Fail:^(NSError *error) {    }];复制代码
//post请求无菊花无缓存    [[VicNetRequest shareManager].vic_model.methodBlock(POST).urlBlock(@"http://api.jinniushuju.com/api/sys/BJTime") startRequestWithSuccess:^(NSDictionary *successDic) {        NSLog(@"%@",successDic);    } Fail:^(NSError *error) {    }];复制代码
//若产品增加需求,且该需求不需要根据后台返回做处理,只需要实现事先准备好的addBlock,或者你自己实现也可以    [[VicNetRequest shareManager].vic_model.urlBlock(@"http://api.hykpay.com/api/sys/GetApp?apptype=1").methodBlock(GET).addBlock().cacheBlock(YES) startRequestWithCache:^(NSDictionary *cacheDic) {    } Success:^(NSDictionary *successDic) {        NSLog(@"%@",successDic);    } Fail:^(NSError *error) {    }];复制代码
//若产品增加需求,但该需求需要根据后台返回做处理,只需要实现事先准备好的addInNetBlock,或者你自己实现也可以   //这里需要注意的是需要实例一下,虽然我们上方的也是实例,但是是伪实例   //在改文件的interface上方@class NetModel;   NetModel * m = [VicNetRequest shareManager].vic_model;   [m.methodBlock(POST).urlBlock(@"http://api.jinniushuju.com/api/sys/BJTime") startRequestWithSuccess:^(NSDictionary *successDic) {       NSLog(@"%@",successDic);   } Fail:^(NSError *error) {          }];   m.addInNetBlock = ^{       NSLog(@"收到数据后调用到我了");   };复制代码

更多用法,如上传下载清理缓存请参看demo

不足之处欢迎吐槽指导,star更好2333

转载地址:http://vqbql.baihongyu.com/

你可能感兴趣的文章
PageRank算法计算网页的价值
查看>>
js面向对象
查看>>
DEDECMS 修改广告链接地址
查看>>
抓住“扁平化”
查看>>
Python中method的参数传递详解
查看>>
Skia深入分析1——skia上下文
查看>>
Tiny Jpeg Decoder (JPEG解码程序) 源代码分析 1:解码文件头
查看>>
windows Server2008 下部署nginx
查看>>
MySQL 性能监控4大指标——第一部分
查看>>
御安全浅析安卓开发代码混淆技术
查看>>
面向对象三大特征
查看>>
我的友情链接
查看>>
Nginx 负载均衡(简单配置)
查看>>
Linux之使用haproxy搭建web群集(2)
查看>>
在Linux启动时自动加载内核模块
查看>>
tomcat部署web程序,jkd环境变量设置,
查看>>
GitLab安装篇-Ubuntu 14.04 LTS
查看>>
我的友情链接
查看>>
沟通的艺术之幻灯片这奇女子
查看>>
一张图介绍CCIE
查看>>