美文网首页
iOS 数据请求基础类的实现

iOS 数据请求基础类的实现

作者: 别闹_53c1 | 来源:发表于2019-04-08 11:12 被阅读0次
    @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);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:iOS 数据请求基础类的实现

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