使用block,AFNetworking,HUD封装高可用代码

写代码时经常使用AFNetworking,看着唠叨不休的重复代码,总想把它封装一下,便于调用.

经过自己的思考封装了一个比较好用的组件.

1.常量定义文件

DefineConstant.h

//// DefineConstant.h// HuanYouWang//// Created by MBinYang on 15/3/23.// Copyright (c) 2015年 cc.huanyouwang. All rights reserved./** 宏定义,常量定义 */#ifndef HuanYouWang_DefineConstant_h#define HuanYouWang_DefineConstant_h#define kTestURL @"xxxxxxx.json"#define kErrorMsg @"错误信息"#define kSuccessMsg @"成功信息"#define kSuccessMsg_2 @"成功"#define kHostURL @"xxx.do"#endif2.所需组件AFNetworkingMBProgressHUD 或类似组件

可以到Github上面搜索,然后下载下来;导入对应的源文件.

封装一个使用AF的网络请求,方便调用

AFRequest.h

//// AFRequest.h// HuanYouWang//// Created by MBinYang on 15/3/23.// Copyright (c) 2015年 cc.huanyouwang. All rights reserved.//#import <Foundation/Foundation.h>#import "AFNetworking.h"#import "MBProgressHUD.h"#import "DefineConstant.h"/** *定义3个block类型 @param SuccessBlock参数为一个Model @param ConnErrorBlock参数为链接失败后的字符串 @return void *model可能不够严谨 */typedef void (^SuccessBlock)(NSObject *model);//请求成功,数据正确typedef void (^ConnErrorBlock)(NSString *errorMsg);//请求失败,可能是网络错误typedef void (^FailedBlock)(NSString *failMsg);//请求成功,但是数据异常@interface AFRequest : NSObject/** 请求之后给定一个值,标志请求成功或者失败 * 0代表失败,1代表成功;区分执行不同类型的Block */@property(assign,readonly,nonatomic)NSUInteger ifFailedData;/** * 后台数据类型,可以传入一个类名.决定如何解析 * 暂时没有作用 */@property(copy,nonatomic)NSString *classKindString;/** *请求成功之后根据需求解析obj *增加 start , loding ,failed ,error等提示block */- (instancetype)initWithURL:(NSString *)url paramDic :(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock failedBlock:(FailedBlock)failBlock connErrorBlock:(ConnErrorBlock)connErrorBlock;/** @param 参数和上面的相同 @warning 只给出成功之后的接口;其他为默认处理 */- (instancetype)initWithURL:(NSString *)url paramDic :(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock;/** 请求开始 *发起请求 @param viewOfHud参数必须指定,让hud显示在指定的View上 */- (void)startRequestWithView:(UIView *)viewOfHud;/** 请求开始2,默认方式 *发起请求 *只处理成功的情况,其他默认处理 @param viewOfHud参数必须指定,让hud显示在指定的View上 */- (void)startRequestDefaultWithView:(UIView *)viewOfHud;@end

AFRequest.m

//// AFRequest.m// HuanYouWang//// Created by MBinYang on 15/3/23.// Copyright (c) 2015年 cc.huanyouwang. All rights reserved.//#import "AFRequest.h"@interface AFRequest ()@property(nonatomic,strong)NSString *url;@property(nonatomic,strong)NSDictionary *dic;@property(nonatomic,strong)AFHTTPRequestOperationManager *afManager;@property(nonatomic,strong)SuccessBlock successBlock;@property(nonatomic,strong)ConnErrorBlock connErrorBlock;@property(nonatomic,strong)FailedBlock failedBlock;@end@implementation AFRequest- (instancetype)initWithURL:(NSString *)url paramDic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock failedBlock:(FailedBlock)failBlock connErrorBlock:(ConnErrorBlock)connErrorBlock;{self = [super init];if (self){_afManager=[[AFHTTPRequestOperationManager alloc]init];_url=url;_dic=dic;_successBlock=successBlock;_failedBlock=failBlock;_connErrorBlock=connErrorBlock;_ifFailedData=1;}return self; }- (instancetype)initWithURL:(NSString *)url paramDic:(NSDictionary *)dic SuccessBlock:(SuccessBlock)successBlock{self = [super init];if (self){_afManager=[[AFHTTPRequestOperationManager alloc]init];_url=url;_dic=dic;_successBlock=successBlock;}return self;}- (void)startRequestWithView:(UIView *)viewOfHud{if ([_url isEqualToString:@""]||!_url) return;if ([viewOfHud isEqual:nil]) return;__weak typeof(self) weak_self = self;MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:viewOfHud animated:YES];hud.labelText = @"正在加载…";AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc]init];[weak_self.afManager GET:_url parameters:_dic success:^(AFHTTPRequestOperation *operation, id responseObject){[hud hide:YES];if (!responseObject) return;if (![responseObject isKindOfClass:[NSDictionary class]]) return;if(weak_self.ifFailedData && weak_self.successBlock){weak_self.successBlock(responseObject);}if(weak_self.ifFailedData && !weak_self.failedBlock){weak_self.failedBlock(kErrorMsg);}} failure:^(AFHTTPRequestOperation *operation, NSError *error){if (weak_self.connErrorBlock){weak_self.connErrorBlock(kErrorMsg);}hud.labelText = kErrorMsg;[hud hide:YES afterDelay:2];}];[op start];}- (void)startRequestDefaultWithView:(UIView *)viewOfHud{if ([_url isEqualToString:@""]||!_url) return;if ([viewOfHud isEqual:nil]) return;__weak typeof(self) weak_self = self;MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:viewOfHud animated:YES];hud.labelText = @"正在加载…";AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc]init];[weak_self.afManager GET:_url parameters:_dic success:^(AFHTTPRequestOperation *operation, id responseObject){[hud hide:YES];if (!responseObject) return;/***在 retun之前最好给与提示@warning 注意此处的类型对应后台返回的数据类型*///if (![responseObject isKindOfClass:[NSDictionary class]]) return;if (![responseObject isKindOfClass:NSClassFromString(weak_self.classKindString)]) return;if(weak_self.successBlock){weak_self.successBlock(responseObject);//根据需求,解析转换responseObject}} failure:^(AFHTTPRequestOperation *operation, NSError *error){hud.labelText = kErrorMsg;[hud hide:YES afterDelay:2];}];[op start];}@end如上代码,封装了AF的网络请求并且给外界预留了接口;使用Block实现

功能:

发起请求,等待提示 hud …;当然,你可以把 HUD换成 别的也可以啦!

测试

大海,别为森林的渺小而沮丧,

使用block,AFNetworking,HUD封装高可用代码

相关文章:

你感兴趣的文章:

标签云: