// 使用单例来封装AFNetworking的调用
// WDAPIClient.h
#import "AFHTTPSessionManager.h"
@interface WDAPIClient : AFHTTPSessionManager
// 初始化WDAPIClient单例
+(instancetype)shareClient;
// GET上传
+(void)wd_getWithURL:(NSString *)url params:(NSDictionary *)params success:(void(^)(NSDictionary * json , NSError *error))success failure:(void(^)(NSError *error))failure;
// POST上传
+(void)wd_postWithURL:(NSString *)url params:(NSDictionary *)params success:(void(^)(NSDictionary * json , NSError *error))success failure:(void(^)(NSError *error))failure;
@end
// WDAPIClient.m
#import "WDAPIClient.h"
@implementation WDAPIClient
// 初始化WDAPIClient单例
+(instancetype)wd_shareClient {
// 创建全局变量
static WDAPIClient * _shareClient = nil;
// 利用GCD创建一个单例模式,只执行一次
static dispatch_once_t onceAPIClientToken;
dispatch_once(&onceAPIClientToken, ^{
// 基链接正式接口
_shareClient = [[GCAPIClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://www.xxx.com:8080/xxx/"]];
// 设置超时
_shareClient.requestSerializer.timeoutInterval = 10;
// 设置安全策略
_shareClient.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
});
return _shareClient;
}
// GET上传
+(void)wd_getWithURL:(NSString *)url params:(NSDictionary *)params success:(void(^)(NSDictionary * json , NSError *error))success failure:(void(^)(NSError *error))failure {
WDAPIClient * client = [WDAPIClient wd_shareClient];
[client GET:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"responseObject == %@",responseObject);
// 取出返回responseObject字典中,key值为resultCode对应的value值
NSNumber * resultCode = responseObject[@"resultCode"];
if (success) { // 如果是success
if (![resultCode isEqual:@(0)] && resultCode) { // 返回的responseObject字典中,key值为resultCode的value值存在且不为0时,认定为不成功.success的block参数为
// 如果通过resultCode判断为传进来的错误码错误,则不传字典出去,而是把错误码传出去。userInfo根据返回的错误码自定义错误信息
success(nil , [NSError errorWithDomain:@"GCAPI" code:resultCode.integerValue userInfo:@{@"msg":responseObject[@"errmsg"]}]);
} else { // 如果请求的字典正常,则将字典通过success的block传出去,错误码为nil
success(responseObject , nil);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
// POST上传
+(void)wd_postWithURL:(NSString *)url params:(NSDictionary *)params success:(void(^)(NSDictionary * json , NSError *error))success failure:(void(^)(NSError *error))failure {
WDAPIClient * client = [WDAPIClient wd_shareClient];
[client GET:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 取出返回responseObject字典中,key值为resultCode对应的value值
NSNumber * resultCode = responseObject[@"resultCode"];
if (success) { // 如果是success
if (![resultCode isEqual:@(0)] && resultCode) { // 返回的responseObject字典中,key值为resultCode的value值存在且不为0时,认定为不成功.success的block参数为
// 如果通过resultCode判断为传进来的错误码错误,则不传字典出去,而是把错误码传出去。userInfo根据返回的错误码自定义错误信息
success(nil , [NSError errorWithDomain:@"GCAPI" code:resultCode.integerValue userInfo:@{@"msg":responseObject[@"errmsg"]}]);
} else { // 如果请求的字典正常,则将字典通过success的block传出去,错误码为nil
success(responseObject , nil);
}
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
if (failure) {
failure(error);
}
}];
}
@end