文档章节

ios网络请求框架,基于AFNetworking封装,其中缓存模块依赖TMCache,JSON解析模块依赖MJExtension,使用简单方便

R
 Robin_
发布于 2017/01/21 20:09
字数 1265
阅读 336
收藏 6

 

    LazyNetForIOS

由于本人不太会写文章,有写得不好得地方请见谅

项目介绍

项目地址

介绍:

  • 这是一个ios网络请求框架,基于AFNetworking封装,其中缓存模块依赖TMCache,JSON解析模块依赖MJExtension
  • 非常感谢这三个作品得作者,个人也热衷与开源,以后有觉得好的东西都会热于与大家分享
  • 如果觉得框架写的还不错,或者对自己有用的话,请给个star吧,感谢您的支持,谢谢
  • 如果框架中有什么写的不足的地方,请告诉我,非常感谢
  • 如果对与使用方法不懂的地方你也可以联系我,乐于为你解答(联系方式你看末尾)

功能:

  • 1.支持json,NSString,NSData,以及自定义的请求,自定义请求可以自行扩展,只需要自定义一个AFHTTPRequestSerializerAFHTTPResponseSerializer子类,并重写对应方法即可
  • 2.目前支持GET和POST方式请求(一般开发场景中已足够用),以及文件上传和下载功能
  • 3.如果是json方式的请求,你只需要把对象的类型传过去,返回结果中就能够得到对应的对象数据,model格式参照MJExtension
  • 4.支持缓存,虽然Cocoa网络请求就支持缓存功能,但实际很多时候都不能满足我们的需求,比如先获取缓存数据再获取网络数据,后续将增加缓存期限
  • 5.支持block方式和delegate方式的数据回调,当一个页面中有多个请求的情况,强烈建议使用delegate方式,然后根据requestId(请求id)取区分是哪一个请求,并且做对应的处理,增加代码的复用性
  • 6.支持返回数据的加工处理,只需要自定义一个ResponseProcess的子类,并重写process方法替换默认加工器即可
  • 7.支持自定义请求参数,不管是什么类型,只需要自定义一个RequestParam的子类,并重写bodys方法即可
  • 8.支持加载框,并且自定义加载框
  • 9.支持取消对应requestId的请求,以及取消所有请求
  • 10.支持取消当前ViewController中的所有请求,请求与ViewController联动
  • 11.日志输出请求信息清晰明了

使用方法(以下使用方法只举了部分使用方法的例子,更多使用方法请自己查看代码,或者联系我)

库引入方式

  • 由于种种原因这个库暂时还没有提交到Cocoapods,如果需要使用请自行导出framework或者把LazyNetLibrary代码直接考到自己项目中

所需权限

  • 联网权限

更新baseUrl

  • 如果你的项目中请求地址前缀是统一的,请使用以下方法来设置基础url;如果不统一就不用设置了
  [[LazyHttpClient getInstance] updateBaseUrl:url];
  或者
  HttpClient *httpClient=[[HttpClient alloc]initWithBaseUrl:url];
  或者
  HttpClient *httpClient=[[HttpClient alloc]init];
  [httpClient updateBaseUrl:url];

get方式请求(以下是block回调方式,delegate方式请自行看例子;例子的回调是重新包装过的,为了使用更加简单)

  • 不带缓存功能请求
    RequestParam* param=[[RequestParam alloc]initWithUrl:@"/mobile/get"];
    [param addBody:self.phoneText.text withKey:@"phone"];
    [param addBody:@"158e0590ea4e597836384817ee4108f3" withKey:@"key"];
    [[LazyHttpClient getInstance]GET_JSON:self param:param responseClazz:[GetPhoneProvinceResponseModel class] loadingDelegate:nil loadCache:nil success:^(NSString *requestId, id response) {
        GetPhoneProvinceResponseModel*model=response;
        self.lable.text=[JSONUtils objectToJSONString:model];
    } fail:^(NSString *requestId, NSInteger *errorCode, NSString *errorMsaaege) {
        self.lable.text=[NSString stringWithFormat:@"获取手机号归属地错误,错误原因:%@",errorMsaaege];
    }];
* 带缓存功能请求(缓存类型有四种,代码中自行查看)
    RequestParam* param=[[RequestParam alloc]initWithUrl:@"/mobile/get"];
    [param addBody:self.phoneText.text withKey:@"phone"];
    [param addBody:@"158e0590ea4e597836384817ee4108f3" withKey:@"key"];
    param.cacheLoadType=USE_CACHE_UPDATE_CACHE;
    [[LazyHttpClient getInstance]GET_JSON:self param:param responseClazz:[GetPhoneProvinceResponseModel class] loadingDelegate:nil 
    loadCache:^(NSString *requestId, id response) {
        GetPhoneProvinceResponseModel*model=response;
        self.lable.text=[JSONUtils objectToJSONString:model];
    } success:^(NSString *requestId, id response) {
        GetPhoneProvinceResponseModel*model=response;
        self.lable.text=[JSONUtils objectToJSONString:model];
    } fail:^(NSString *requestId, NSInteger *errorCode, NSString *errorMsaaege) {
        self.lable.text=[NSString stringWithFormat:@"获取手机号归属地错误,错误原因:%@",errorMsaaege];
    }];

post方式请求(以下是block回调方式,delegate方式请自行看例子;例子是经过包装了的)

  • 不带缓存功能的
     NSString*theUrl=@"/qqevaluate/qq";
     RequestParam* param=[[RequestParam alloc]initWithUrl:theUrl];
     [param addBody:self.phoneText.text withKey:@"qq"];
     [param addBody:@"780e8bced58c6203140b858d7aa2644c" withKey:@"key"];
     [[LazyHttpClient getInstance]POST_JSON:self param:param responseClazz:[QQXiongJIResponseModel class] loadingDelegate:nil loadCache:nil success:^(NSString *requestId, id response) {
           QQXiongJIResponseModel*model=response;
           self.lable.text=[JSONUtils objectToJSONString:model];
      } fail:^(NSString *requestId, NSInteger *errorCode, NSString *errorMsaaege) {
           self.lable.text=[NSString stringWithFormat:@"调用QQ测凶吉接口错误,错误原因:%@",errorMsaaege];
      }];
* 带缓存功能的(缓存类型有四种,代码中自行查看)
    NSString*theUrl=@"/qqevaluate/qq";
    RequestParam* param=[[RequestParam alloc]initWithUrl:theUrl];
    [param addBody:self.phoneText.text withKey:@"qq"];
    [param addBody:@"780e8bced58c6203140b858d7aa2644c" withKey:@"key"];
    param.cacheLoadType=USE_CACHE_UPDATE_CACHE;
    [[LazyHttpClient getInstance]POST_JSON:self param:param responseClazz:[QQXiongJIResponseModel class] loadingDelegate:nil loadCache:^(NSString *requestId, id response) {
        QQXiongJIResponseModel*model=response;
        self.lable.text=[JSONUtils objectToJSONString:model];
    } success:^(NSString *requestId, id response) {
        QQXiongJIResponseModel*model=response;
        self.lable.text=[JSONUtils objectToJSONString:model];
    } fail:^(NSString *requestId, NSInteger *errorCode, NSString *errorMsaaege) {
        self.lable.text=[NSString stringWithFormat:@"调用QQ测凶吉接口错误,错误原因:%@",errorMsaaege];
    }];

上传

  • 待续...

下载

  • 待续...

关于作者Robin

  • 屌丝程序员
  • 如果对你有帮助,请给个star,谢谢支持
  • GitHub: Robin-jiangyufeng
  • QQ:429257411
  • 交流QQ群 236395044

© 著作权归作者所有

R
粉丝 0
博文 1
码字总数 1265
作品 0
杭州
私信 提问
EasyIOS 2.1 发布,优化网络请求与ORM操作

EasyIOS 2.1发布 此版本相较2.0更新内容如下: 1.优化ORM操作 ,丰富数据库查询方法 2.修改网络请求,选用大家熟悉的AFNetworking 移除 MKNetWorkKit 3.增加正则表达式操作类 4.集成更加友好...

墨水
2014/09/12
2.9K
0
iOS常用的三方库

UI相关:(转载http://www.jianshu.com/p/be0401e35e06) 上拉下拉刷新控件: 链接:MJRefresh 动态启动图: 链接:YFStartView MBProgressHUD: 链接:MBProgressHUD 一个效果很好的弹出下拉框:...

oschina6k
2016/05/11
429
1
手把手教你使用MJExtension(简单使用)

一、MJExtension第三方框架 我们在iOS开发过程中,我们常常需要将字典数据(也就是JSON数据)与Model模型之间的转化,例如网络请求返回的微博数据、等等,如果我们自己全部手动去创建模型并赋值...

贝勒老爷
2018/08/15
0
0
iOS源码补完计划--AFNetworking 3.1.0源码研读

参拜一下AFNetworking的源码。 第四篇源码、暂时来看也是iOS方向的最后一篇、撸完准备趁着热乎撸一撸网络协议。 目录 准备工作 功能模块 AFURLSessionManager/AFHTTPSessionManager AFNetwo...

kirito_song
2018/05/25
0
0
推荐几个牛逼的iOS开发常用框架及Xcode插件

管理工具 1. CocoaPods 搞iOS开发的应该都知道的,管理框架,并解决依赖问题。不可不用。下面用到的框架基本都可以用这个搜索和进行安装。怎么用搜搜教程就好了。和后文提到的配套使用,操作...

Harry_1234
2017/10/23
73
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
81
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部