在开发过程中,很多模块都要去请求网络数据,如果每遇到一次都要去编写请求网络的方法,为了方便,封装网络请求
.h文件
//写一个枚举标示请求类型
typedef NS_ENUM(NSInteger,RequstType){
GET,
POST
};
//定义两个block,把block当做参数
typedef void(^Success)(NSData *data);
typedef void(^Faill)(NSError *error);
@interface NetWorkRequestManager : NSObject
/**
* <#Description#>
*
* @param type 请求类型
* @param urlStr 请求的URl
* @param dicPare 请求的参数 post
* @param success 请求成功
* @param error 请求失败
*/
+(void)requestWithType:(RequstType)type url:(NSString *)urlStr para:(NSDictionary *)dicPare finish:(Success)success error:(Faill)faill;
.m文件
+(void)requestWithType:(RequstType)type url:(NSString *)urlStr para:(NSDictionary *)dicPare finish:(Success)success error:(Faill)faill
{
NSURLSession *session = [NSURLSession sharedSession];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlStr]];
//判断是什么类型的数据请求
if (type == POST) {
request.HTTPMethod = @"post";
NSData *data = [NSJSONSerialization dataWithJSONObject:dicPare options:NSJSONWritingPrettyPrinted error:nil];
request.HTTPBody = data;
}
NSURLSessionTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (data) {
success(data);
}else{
faill(error);
}
}];
[task resume];
}