美文网首页
对网络请求的简单封装

对网络请求的简单封装

作者: 胜利_Soley | 来源:发表于2016-07-09 15:08 被阅读0次

    1.封装之前需要一个第三方库:AFNetworking

    2.在.h文件内声明两个参数Block

    #import <Foundation/Foundation.h>

    第一个参数:请求完成后将转换成Data的数据输出

    typedef void (^RequestComplete)(NSData *data);

    第二个参数:请求结束后,刷新UI

    typedef void (^UpdateUI)();

    @interface RequestManager :NSObject

          这个方法是自写的一个“+”方法,里面的参数url:请求的网址,parameter:网址的参数,method:请求的方法一般有两种POST和GET,complete:请求完要做的事,updateUI:刷新UI。

    + (void)fetchDataWithUrl:(NSString *)url parameter:(NSDictionary *)parameters method:(NSString *)method complete:(RequestComplete)complete updateUI(UpdateUI)update;

    @end

    3.在.m文件内实现方法

    #import "RequestManager.h"

    导入第三方头文件

    #import <AFNetworking.h>

    @implementation RequestManager

    请求数据,根据类型会自动识别请求方式

    + (void)fetchDataWithUrl:(NSString *)url parameter:(NSDictionary *)parameters method:(NSString *)method complete:(RequestComplete)complete updateUI:(UpdateUI)update{

        //创建请求对象并设置请求对象的属性

        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

        manager.responseSerializer = [AFHTTPResponseSerializer serializer];

        //这里用一个子线程进行请求   

        dispatch_async(dispatch_get_global_queue(0,0),^{

            if ([method isEqualToString:@"GET"]){

                [manager GET:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

         //把Data数据传出去

         complete((NSData *)responseObject);

         //回到主线程

         dispatch_async(dispatch_get_main_queue(), ^{

               //刷新UI

               update();

        });

    }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        }];

    }else{

        [manager POST:url parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        //把Data传出去

        complete((NSData *)responseObject);

       //回到主线程

        dispatch_async(dispatch_get_main_queue(), ^{

               //刷新UI

               update();

         });

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

              }];

          }

      });

    }

    @end

    相关文章

      网友评论

          本文标题:对网络请求的简单封装

          本文链接:https://www.haomeiwen.com/subject/ugjadttx.html