AFNetWorking3.0 封装数据请求类!差点就完美了!

公司的项目一直都是用的AFNetWorking2.1,最近打算开一个新项目,于是想着更新下AFNetWorking3.0,不看不知道一看还真有点操蛋,方法变化很多,最明显的就是3.0里面抛弃了原有的Operation方法,大力推广Session方法里面的很多方法回调都变了,很是操蛋,,不过该有的功能,实现都只是换了个方式实现,,接下来就把两者的区别和替换方法记录下来,也为其他的小伙伴省去麻烦。demo也在同步制作中,稍后上线。

先说明一下,在这里我全部用的管理区manager,而不是单单一个session。这里我们就不说 用manager直接post或者get的方法,,我们主要讲下task的使用方法,这种方法更全面,更利于封装。

1:管理器区别

AFHTTPRequestOperationManager  --------》   AFHTTPSessionManager  


        //参数编码格式转换

        requestString = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];



2:请求体参数区别,封装方法一样

        //转换请求链接格式  其中 requestString 是地址接口  postParameters是字典型参数

        NSMutableURLRequest *request = [manager.requestSerializerrequestWithMethod:@“GET” URLString:requestStringparameters:postParameters error:nil];


3:请求方法,区别很大

2.1里面,我们可以直接在回调的responseObject里面获取数据

    AFHTTPRequestOperation *operation = [managerHTTPRequestOperationWithRequest:requestsuccess:^(AFHTTPRequestOperation *operation,id responseObject)

{

            NSDictionary *resultDict = responseObject;//这就是我们想要的数据,也可以设置成自己封装的格式


    } failure:^(AFHTTPRequestOperation *operation,NSError *error) {


}


3.0里面

    NSURLSessionDataTask *dataTask = [managerdataTaskWithRequest:request completionHandler:^(NSURLResponse *_Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {

    

//在这里我们可以处理我们自己的数据

     //状态码

        NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;

        NSInteger responseStatusCode = [httpResponsestatusCode];

        NSLog(@"%ld", responseStatusCode)  

  

success(responseObject);//数据 q

}];

    

    [dataTaskresume];


总结:看似上面很少的几行代码却都是总结出来的结果。过程其实很复杂,所以结果才会简单,这就是代码的魅力。


刚学习3.0的时候查询了很多的资料,如大海捞针,又千篇一律。。。总之就是从一堆交织错乱的毛线团中找到自己想要的那根线,然后制成自己的毛衣。

思路:简单总结下思路,首先创建管理类manager,上面忘了写了 在下面补上,就是返回manager。然后封装参数数据,用requestSerializer里面的reques方法封装成nsurlrequest请求链接

,有了请求链接,然后我们就该去使用它,在这里用到新的task!通过sessiontask的回调完成数据请求,这样一整套数据请求流程就下来了。

+ (AFHTTPSessionManager *) getManager

{

    Reachability *reachability = [ReachabilityreachabilityForInternetConnection];

    isReachable = [reachabilityisReachable];

    

    staticAFHTTPSessionManager *manager = nil;

    staticdispatch_once_t predicate;

    dispatch_once(&predicate, ^{

        manager = [[AFHTTPSessionManageralloc] init];

        AFJSONRequestSerializer *serializer = [AFJSONRequestSerializerserializer];

        [manager setRequestSerializer:serializer];

        AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializerserializer];

        [manager setResponseSerializer:responseSerializer];

        manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypessetByAddingObject:@"text/html"];

        

        [[AFNetworkActivityIndicatorManagersharedManager] setEnabled:YES];


        [manager.reachabilityManagerstartMonitoring];

    });

    return manager;

}



这里我们可以实现请求GET POST 下篇文章我们记录 上传、下载功能新方法!demo也在同步进行中,,完善后第一时间分享给大家。


在这里打个广告,这是我的个人公众号,里面有ios开发心得,知识总结,,也有java新手上路知识。demo会在第一时间同步到里面。多谢关注,一起进步!


AFNetWorking3.0 封装数据请求类!差点就完美了!_第1张图片






你可能感兴趣的:(iOS,数据请求)