iOS开发对AFNetworking3.0的二次封装

来源:互联网 发布:网络同步课堂 编辑:程序博客网 时间:2024/06/17 02:34

①封装

创建一个新的类,我暂且命名为HttpRequest

.h文件

#import <Foundation/Foundation.h>@class AFNetworking;@interface HttpRequest : NSObject+ (HttpRequest *)sharedInstance;- (void)GET:(NSString *)URLString dict:(id)dict succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure;- (void)POST:(NSString *)URLString dict:(id)dict succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure;@end

.m文件

#import "HttpRequest.h"#import "AFNetworking.h"@implementation HttpRequest/** *  创建网络请求类的单例 */static HttpRequest *httpRequest = nil;+ (HttpRequest *)sharedInstance{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        if (httpRequest == nil) {            httpRequest = [[self alloc] init];        }    });    return httpRequest;}+(instancetype)allocWithZone:(struct _NSZone *)zone{    static dispatch_once_t onceToken;    dispatch_once(&onceToken, ^{        if (httpRequest == nil) {            httpRequest = [super allocWithZone:zone];        }    });    return httpRequest;}- (instancetype)copyWithZone:(NSZone *)zone{    return httpRequest;}/** *  封装AFN的GET请求 * *  @param URLString 网络请求地址 *  @param dict      参数(可以是字典或者nil) *  @param succeed   成功后执行success block *  @param failure   失败后执行failure block */- (void)GET:(NSString *)URLString dict:(id)dict succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure{    //创建网络请求管理对象    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];    //申明返回的结果是json类型    manager.responseSerializer = [AFJSONResponseSerializer serializer];    //申明请求的数据是json类型    manager.requestSerializer = [AFJSONRequestSerializer serializer];    //如果报接受类型不一致请替换一致text/html或别的    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];    //发送网络请求(请求方式为GET)    [manager GET:URLString parameters:dict progress:^(NSProgress * _Nonnull downloadProgress) {            } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {        succeed(responseObject);    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {        failure(error);    }];}/** *  封装AFN的POST请求 * *  @param URLString 网络请求地址 *  @param dict      参数(可以是字典或者nil) *  @param succeed   成功后执行success block *  @param failure   失败后执行failure block */- (void)POST:(NSString *)URLString dict:(id)dict succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))failure{    //创建网络请求管理对象    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];    //申明返回的结果是json类型    manager.responseSerializer = [AFJSONResponseSerializer serializer];    //申明请求的数据是json类型    manager.requestSerializer = [AFJSONRequestSerializer serializer];    //如果报接受类型不一致请替换一致text/html或别的    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", nil];    //发送网络请求(请求方式为POST)    [manager POST:URLString parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {            } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {        succeed(responseObject);    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {        failure(error);    }];}@end

②使用

调用时代码很少,很方便使用(也可以把调用的代码写成代码片段,提高效率)

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:<#(nonnull id), ...#>, nil];HttpRequest *httpRequest = [HttpRequest sharedInstance];[httpRequest GET:<#(NSString *)#> dict:dict succeed:^(id data) {    NSLog(@"%@", data);    } failure:^(NSError *error) {    NSLog(@"%@", error);}];
如果不需要传参数,就不用创建dict了,get请求那里直接写nil就行.

post跟get一样,除了把get改成post,其余地方都不用改动



4 0
原创粉丝点击