基于猿题库网络请求再次封装

来源:互联网 发布:mac战网三合一 编辑:程序博客网 时间:2024/04/29 00:57



下载地址:  https://github.com/weibo1314/WB_NeiApiManager



WB_NetApiManager 介绍

=====================


最近闲来无事,整理了前几个项目做得积累的经验...基于YTKNetwork进行再封装,实现TYKNetwork一些基本的使用


因为没有服务器..我就不做demo了  封装的网络请求较为简单想要测一下很简单...并且经历了好几个项目的测试的,,,这个其实就是把之前项目的代码整理起来的...用起来不会出什么问题


入门级封装  各位大大有什么好的意见和建议请联系我


QQ  413151868



## WB_NetApiManager 基本组成



#########注意事项###########

1.PCH要引用     #import "WB_NetApiMacro.h"


2.如果 是http请求  请在info.plist里进行修改  具体修改自行百度


3.AFNetworking可以使用cocopod   但是YTKNetwork不要使用...因为我对YTKNetwork部分代码进行修改例如适配text/html..打印获取的数据等


#pragma mark   -----代码

-------------------------

platform :ios, ‘8.0’


target '项目名称' do


pod 'AFNetworking', '~> 3.0'


end


----------------------------------



WB_NetApiManager 包括以下几个基本的类:


 * WB_ArgumentFilterProtocol 类:用于配置全局参数,比如版本号

 * WB_BaseRequest 类:网络请求基类 所有的网络请求继承这个方法

 * WB_Request 类:继承WB_BaseRequest类   获取数据API的基类,所有获取数据的API 都需要继承于这个方法

 * WB_UploadImageRequest 类:上传图片API的基类,所有上传图片的API 都需要继承于这个方法 如果批量上传图片  请使用下面的类

 * WB_BatchUploadImgRequest 类:批量上传图片api

 * WB_NetApiConstant 类 : 定义全局常量   初始化网络请求api


* WB_NetApiMacro :  配置公共参数



下面简单介绍下网络获取和批量上传图片的使用


### WB_NetApiMacro


配置公共参数


1  请求方式  GET POST

2  统一管理接口地址..方便正式服务器和测试服务器之间的切换  方便开发

3  打印输入的宏写在这里面


### WB_NetApiConstant 类


程序运行是要打开api


```objectivec

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.


self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];


//初始化网络请求

[self initRequest];


[self initWindow];


self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];



return YES;

}


#pragma mark ————— 初始化网络请求 —————

-(void)initRequest{


[WB_NetApiConstant sharedInstance];


}


```

### WB_Request 类   获取接口数据继承此类


看代码

1  创建api继承与此类  初始化方法带参数

```objectivec


#import "WB_Request.h"


@interface HomeNetApi : WB_Request



-(id)initWithPageNum:(NSInteger )pagenum;



@end


```

2  配置接口地址和传参

```objectivec

#import "HomeNetApi.h"


@implementation HomeNetApi

{

NSInteger _pagenum;

}

-(id)initWithPageNum:(NSInteger )pagenum

{

    if (self = [super init])

      {

          _pagenum = pagenum;

      }


    return self;

}


###########接口地址#########

-(NSString *)requestUrl

{

    return @"home/index/start";

}

#########传参#############

-(id)requestArgument

{

    return @{

        @"pagenum" :@(_pagenum),

    };

}


@end


```

3  调用api 开始网络请求

```objectivec


HomeNetApi *api = [[HomeNetApi alloc] initWithPageNum:0];

[api startWithCompletionBlockWithSuccess:^(__kindof YTKBaseRequest * _Nonnull request) {


} failure:^(__kindof YTKBaseRequest * _Nonnull request) {


}];


```


### WB_BatchUploadImgRequest 类   批量上传图片



批量上传图片只有一个方法..实现就好  如果有获取每一张上传图片的上传进度...有一个代理实现就可以实时获取上传进度


看代码


1  实现初始化方法  :   -(instancetype)initWithImgArray:(NSMutableArray<UIImage *> *)imgArray;


```objectivec

    NSMutableArray *arr = [NSMutableArray arrayWithObject:_img.image];

    [arr addObject:_second.image];

    WB_BatchUploadImgRequest *api = [[WB_BatchUploadImgRequest alloc] initWithImgArray:arr];

    api.mDelegate = self;

    [api startWithCompletionBlockWithSuccess:^(YTKBatchRequest * _Nonnull batchRequest) {

        NSLog(@"succeed");

        //图片上传成功

        NSArray *requests = batchRequest.requestArray;

        //获取每张图片返回的图片名

        WB_UploadImageRequest *api = (WB_UploadImageRequest *)requests[0];

        [api getContent];

    } failure:^(YTKBatchRequest * _Nonnull batchRequest) {

        NSLog(@"failed");

    }];


```


2  代理获取上传进度  实现代理方法   -(void)upBatchRequestProgressWithApiTag:(NSInteger )apiTag andProgress:(NSProgress *)progress;

```objectivec


-(void)upBatchRequestProgressWithApiTag:(NSInteger )apiTag andProgress:(NSProgress *)progress

  {

      NSLog(@"第%ld张图片加载了%.2f------------",apiTag,progress.fractionCompleted);

  }


```




## 其他说明

      请求头   在WB_Request类里第32行添加请求头

      

      

      网络请求的处理和断网提醒在YTKNetworkAgent的第670-700行

      

      关于数据返回要提一句  为了方便开发   网络请求成功会返回对应的jsonStr和相对应的字典转成的属性

      

      创建model后吧需要的属性粘贴进去就好..大大节省了开发时间

      

      

      下面是打印的效果  会打印出每一个字段对应的属性 用的是否直接粘贴就好



```  控制台

    2017-09-28 12:05:13.700320+0800 WB_iOS_FrameWork[3677:299879]

    @property (nonatomic ,strong) NSString *time;


    @property (nonatomic ,strong) NSString *appModel;


    @property (nonatomic ,strong) NSString *title;


    @property (nonatomic ,strong) NSString *name;


    @property (nonatomic ,strong) NSString *adPic;


    @property (nonatomic ,strong) NSString *seller_id;

    2017-09-28 12:05:13.700637+0800 WB_iOS_FrameWork[3677:299879]

    @property (nonatomic ,strong) NSString *title;


    @property (nonatomic ,strong) NSString *icon;


    @property (nonatomic ,strong) NSString *type;

```






以上几个示例代码在 Demo 工程中也可获得。