美文网首页
基于 AFNetwork 的二次封装

基于 AFNetwork 的二次封装

作者: CaptainRoy | 来源:发表于2019-07-13 17:37 被阅读0次
@interface DDNetworkRequest : NSObject

+(DDNetworkRequest *)shareInstance;


/*
 监听网络状态
 */
-(void)monitorNetworkingStatus;

/*
 GET 请求
 @param NSString *urlString 地址链接
 @param NSDictionary *headerDictionary 请求头参数
 @param NSDictionary *paramDictionary 请求体参数
 */
-(void)requestGETWithURLString:(NSString *)urlString WithHTTPHeaderFieldDictionary:(NSDictionary *)headerDictionary withParamDictionary:(NSDictionary *)paramDictionary successful:(void (^)(NSDictionary *))success failure:(void (^)(NSError *))failure;

/*
 POST 请求 (需要自己设置请求头)
 @param NSString *urlString 地址链接
 @param NSDictionary *headerDictionary 请求头参数
 @param NSDictionary *paramDictionary 请求体参数
 */
-(void)requestPostWithURLString:(NSString *)urlString WithHTTPHeaderFieldDictionary:(NSDictionary *)headerDictionary withParamDictionary:(NSDictionary *)paramDictionary successful:(void (^)(NSDictionary *))success failure:(void (^)(NSError *))failure;


/*
 PUT 请求
 @param NSString *urlString 地址链接
 @param NSDictionary *headerDictionary 请求头参数
 @param NSDictionary *paramDictionary 请求体参数
 */
-(void)requestPUTWithURLString:(NSString *)urlString WithHTTPHeaderFieldDictionary:(NSDictionary *)headerDictionary withParamDictionary:(NSDictionary *)paramDictionary successful:(void (^)(NSDictionary *))success failure:(void (^)(NSError *))failure;


@end
#import "DDNetworkRequest.h"
#import "AFNetworking.h"

@interface DDNetworkRequest()

@property(nonatomic,strong)AFHTTPSessionManager *sessionManager;

@end

@implementation DDNetworkRequest

+(DDNetworkRequest *)shareInstance
{
    static DDNetworkRequest *networking = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        networking = [[self alloc] init];
    });
    return networking;
}

-(instancetype)init
{
    if (self = [super init]) {
        _sessionManager = [AFHTTPSessionManager manager];
        _sessionManager.requestSerializer = [AFJSONRequestSerializer new];
        _sessionManager.responseSerializer = [AFJSONResponseSerializer new];
        _sessionManager.requestSerializer = [AFJSONRequestSerializer serializer]; // 请求
        _sessionManager.responseSerializer = [AFJSONResponseSerializer serializer]; // 响应
        _sessionManager.requestSerializer.timeoutInterval = 30.0f;
        // 设置请求头
        [_sessionManager.requestSerializer setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    }
    return self;
}

/*
 监听网络状态
 */
-(void)monitorNetworkingStatus
{
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        
        if (status == AFNetworkReachabilityStatusUnknown || status == AFNetworkReachabilityStatusNotReachable) {
            UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"未知网络" message:NULL preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction *action = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:NULL];
            [alert addAction:action];
            [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:alert animated:YES completion:NULL];
        }
    }];
}

/*
 GET 请求
 @param NSString *urlString 地址链接
 @param NSDictionary *headerDictionary 请求头参数
 @param NSDictionary *paramDictionary 请求体参数
 */
-(void)requestGETWithURLString:(NSString *)urlString WithHTTPHeaderFieldDictionary:(NSDictionary *)headerDictionary withParamDictionary:(NSDictionary *)paramDictionary successful:(void (^)(NSDictionary *))success failure:(void (^)(NSError *))failure
{
    if (headerDictionary) {
        for (NSString *key in headerDictionary) {
            [_sessionManager.requestSerializer setValue:headerDictionary[key] forHTTPHeaderField:key];
        }
    }
    
    [_sessionManager GET:urlString parameters:paramDictionary progress:NULL success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        if (success) {
            NSDictionary *dictionary = [NSDictionary dictionaryWithDictionary:responseObject];
            if (dictionary) {
                success(dictionary);
            }
        }
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

/*
 POST 请求 (需要自己设置请求头)
 @param NSString *urlString 地址链接
 @param NSDictionary *headerDictionary 请求头参数
 @param NSDictionary *paramDictionary 请求体参数
 */
-(void)requestPostWithURLString:(NSString *)urlString WithHTTPHeaderFieldDictionary:(NSDictionary *)headerDictionary withParamDictionary:(NSDictionary *)paramDictionary successful:(void (^)(NSDictionary *))success failure:(void (^)(NSError *))failure
{
    if (headerDictionary) {
        for (NSString *key in headerDictionary) {
            [_sessionManager.requestSerializer setValue:headerDictionary[key] forHTTPHeaderField:key];
        }
    }
    
    [_sessionManager POST:urlString parameters:paramDictionary progress:NULL success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (success) {
            
            NSDictionary *dictionary = [NSDictionary dictionaryWithDictionary:responseObject];
            if (dictionary) {
                success(dictionary);
            }
        }
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
    
}

/*
 PUT 请求
 @param NSString *urlString 地址链接
 @param NSDictionary *headerDictionary 请求头参数
 @param NSDictionary *paramDictionary 请求体参数
 */
-(void)requestPUTWithURLString:(NSString *)urlString WithHTTPHeaderFieldDictionary:(NSDictionary *)headerDictionary withParamDictionary:(NSDictionary *)paramDictionary successful:(void (^)(NSDictionary *))success failure:(void (^)(NSError *))failure
{
    if (headerDictionary) {
        for (NSString *key in headerDictionary) {
            [_sessionManager.requestSerializer setValue:headerDictionary[key] forHTTPHeaderField:key];
        }
    }
    [_sessionManager PUT:urlString parameters:paramDictionary success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        if (success) {
            NSDictionary *dictionary = [NSDictionary dictionaryWithDictionary:responseObject];
            if (dictionary) {
                success(dictionary);
            }
        }
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failure) {
            failure(error);
        }
    }];
}

@end

相关文章

网友评论

      本文标题:基于 AFNetwork 的二次封装

      本文链接:https://www.haomeiwen.com/subject/stpmkctx.html