iOS 数据请求基础类的实现
2019-04-08 本文已影响0人
别闹_53c1
@interface AlivcAppServer : NSObject
/**
get请求的封装
本应用所有的get请求最终都通过这个方法发起
@param urlString 请求字符串
@param handle 请求结果的处理代码块 errString不为空,则代表请求出错
*/
+ (void)getWithUrlString:(NSString *)urlString completionHandler:(void (^)(NSString *__nullable errString,NSDictionary *_Nullable resultDic))handle;
/**
post请求的封装
本应用所有的get请求最终都通过这个方法发起
@param urlString 请求字符串
@param parametersDic 参数
@param handle 请求结果的处理代码块 errString不为空,则代表请求出错
*/
+ (void)postWithUrlString:(NSString *)urlString parameters:(NSDictionary *)parametersDic completionHandler:(void (^)(NSString *__nullable errString,NSDictionary *_Nullable resultDic))handle;
/**
统一处理返回的结果字典
@param resultDic 结果字典
@param success 结果字典表明请求成功,那么解析出数据字典让别人使用
@param failure 失败
*/
+ (void)judgmentResultDic:(NSDictionary *)resultDic success:(void (^)(id dataObject))success doFailure:(void (^)(NSString *))failure;
#import <AFNetworking/AFNetworking.h>
@implementation AlivcAppServer
// 单例会解决请求类内存泄露的问题
+ (AFHTTPSessionManager*) manager
{
static dispatch_once_t onceToken;
static AFHTTPSessionManager *manager = nil;
dispatch_once(&onceToken, ^{
manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/javascript",@"text/html",@"text/plain",nil];
manager.requestSerializer=[AFHTTPRequestSerializer serializer];
});
return manager;
}
+ (void)getWithUrlString:(NSString *)urlString completionHandler:(void (^)(NSString * _Nullable, NSDictionary * _Nullable))handle{
[[self manager] GET:urlString parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if ([responseObject isKindOfClass:[NSDictionary class]]) {
NSDictionary *resultDic = (NSDictionary *)responseObject;
handle(nil,resultDic);
}else{
handle(@"数据格式异常",nil);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
handle(error.description,nil);
}];
}
+ (void)postWithUrlString:(NSString *)urlString parameters:(NSDictionary *)parametersDic completionHandler:(void (^)(NSString * _Nullable, NSDictionary * _Nullable))handle{
[[self manager] POST:urlString parameters:parametersDic progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
if ([responseObject isKindOfClass:[NSDictionary class]]) {
NSDictionary *resultDic = (NSDictionary *)responseObject;
handle(nil,resultDic);
}else{
handle(@"数据格式异常",nil);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
handle(error.description,nil);
}];
}
/**
统一处理返回的结果字典
@param resultDic 结果字典
@param success 结果字典表明请求成功,那么解析出数据字典让别人使用
@param failure 失败
*/
+ (void)judgmentResultDic:(NSDictionary *)resultDic success:(void (^)(id dataObject))success doFailure:(void (^)(NSString *))failure{
BOOL isSucess = [resultDic[@"result"] boolValue];
if (isSucess) {
id dataObject = resultDic[@"data"];
success(dataObject);
}else{
NSString *messageString = resultDic[@"message"];
failure(messageString);
}
}