对网络请求的简单封装

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

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

#import

第一个参数:请求完成后将转换成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

@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

你可能感兴趣的:(对网络请求的简单封装)