美文网首页iOS开发文集
简单封装AFNetworking:post、get、put、pa

简单封装AFNetworking:post、get、put、pa

作者: Luy7788 | 来源:发表于2016-06-06 19:50 被阅读1183次

    最近基于AF3.0简单的封装了请求post、get、put、patch、delete的请求方式:

    头文件AFNetworkRequest.h

    
    #import <Foundation/Foundation.h>
    
    //请求方式:post、get、put、patch、delete
    typedef NS_ENUM(NSUInteger, RequestMethod) {
        Request_POST = 0,
        Request_GET,
        Request_PUT,
        Request_PATCH,
        Request_DELETE
    };
    
    @interface AFNetworkRequest : NSObject
    
    /**
     *  AFNetworking请求方法
     *
     *  @param method     请求方式 Request_POST / Request_GET / Request_PUT / Request_PATCH / Request_DELETE
     *  @param parameters 请求参数 --支持NSArray, NSDictionary, NSSet这三种数据结构
     *  @param url        请求url字符串
     *  @param success    请求成功回调block
     */
    + (void)AFNetworkRequestWithRequestMethod:(RequestMethod)method
                                   parameters:(NSMutableDictionary *)parameters
                                          url:(NSString *)url
                                      success:(void (^)(NSDictionary *dict))success
                                      failure:(void (^)(NSError *error))failure;
    
     
    
    

    AFNetworkRequest.m

    其中XLog(@"")为打印;ALERT_SHOW(@"")是提示性信息

    
    #import "AFNetworking.h"
    #import "AFNetworkRequest.h"
    #import "AlertShow.h"  //自己写的提示样式
    
    @interface AFNetworkRequest ()
    
    //错误状态码 iOS-sdk里面的 NSURLError.h 文件
    typedef NS_ENUM (NSInteger, AFNetworkErrorType) {
    
        AFNetworkErrorType_TimedOut   = NSURLErrorTimedOut,//-1001 请求超时
        AFNetworkErrorType_UnURL      = NSURLErrorUnsupportedURL,//-1002 不支持的url
        AFNetworkErrorType_NoNetwork  = NSURLErrorNotConnectedToInternet,//-1009 断网
        AFNetworkErrorType_404Failed  = NSURLErrorBadServerResponse,//-1011 404错误
    
        AFNetworkErrorType_3840Failed = 3840,//请求或返回不是纯Json格式
    };
    
    @end
    
    @implementation AFNetworkRequest
    
    /**
     *  请求失败回调方法
     *
     *  @param error 错误对象
     */
    + (void)requestFailed:(NSError *)error{
      
    //    //停止动画效果
    //    [[LoadingView shareInstance]stopAnimating];
        
        XLog(@"--------------\n%zd %@",error.code, error.debugDescription);
        switch (error.code) {
            case AFNetworkErrorType_NoNetwork :
                ALERT_SHOW(@"网络链接失败,请检查网络。");
                break;
            case AFNetworkErrorType_TimedOut :
                ALERT_SHOW(@"访问服务器超时,请检查网络。");
                break;
            case AFNetworkErrorType_3840Failed :
                ALERT_SHOW(@"服务器报错了,请稍后再访问。");
                break;
            default:
                ALERT_SHOW(@"网络链接失败");
                break;
        }
         
    }
    
    /**
     *  AFNetworking请求方法
     *
     *  @param method     请求方式 Request_POST / Request_GET / Request_PUT / Request_PATCH / Request_DELETE
     *  @param parameters 请求参数
     *  @param url        请求url字符串
     *  @param success    请求成功回调block
     */
    + (void)AFNetworkRequestWithRequestMethod:(RequestMethod)method
                                   parameters:(NSMutableDictionary *)parameters
                                          url:(NSString *)url
                                      success:(void (^)(NSDictionary *dict))success
                                      failure:(void (^)(NSError *error))failure{
         
    //    //提示信息
    //    [MBProgressHUD showMessageWithoutBackground:@"请稍候" toView:nil];
        
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
        manager.requestSerializer.timeoutInterval = 30.0f;//超时时间
        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/html", @"text/json", @"text/javascript", nil]; 
        manager.responseSerializer = [AFHTTPResponseSerializer serializer];
        
    //    WEAKSELF
    //    [[LoadingView shareInstance]startAnimating];
        
        switch (method) {
                //POST 方法
            case Request_POST:{
                
                [manager POST:url parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
                    XLog(@"uploadProgress __ %@ __ ",uploadProgress);
                } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
                    //请求成功的操作    
                    if (success) { 
                        NSDictionary *dict = [NSJSONSerialization  JSONObjectWithData:responseObject options:0 error:NULL]; 
                        if(dict){ 
                            success(dict); 
                        } 
                    }
    
                } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                    
                    //失败的处理
                    [AFNetworkRequest requestFailed:error];
                    if(failure){
                        failure(error);
                    }
                    
                }];
            }   break;
                //GET 方法
            case Request_GET:{
                [manager GET:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
                    
                } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
                    //请求成功的操作    
                    if (success) { 
                        NSDictionary *dict = [NSJSONSerialization  JSONObjectWithData:responseObject options:0 error:NULL]; 
                        if(dict){ 
                            success(dict); 
                        } 
                    }
                    
                } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                    
                    //失败的处理
                    [AFNetworkRequest requestFailed:error];
                    if(failure){
                        failure(error);
                    }
    
                }];
            }   break;
                //PUT 方法
            case Request_PUT:{
                [manager PUT:url parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
                    //请求成功的操作    
                    if (success) { 
                        NSDictionary *dict = [NSJSONSerialization  JSONObjectWithData:responseObject options:0 error:NULL]; 
                        if(dict){ 
                            success(dict); 
                        } 
                    }
                    
                } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                    
                    //失败的处理
                    [AFNetworkRequest requestFailed:error];
                    if(failure){
                        failure(error);
                    }
    
                }];
            }   break;
                //PATCH 方法
            case Request_PATCH:{
                [manager PATCH:url parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
                    //请求成功的操作    
                    if (success) { 
                        NSDictionary *dict = [NSJSONSerialization  JSONObjectWithData:responseObject options:0 error:NULL]; 
                        if(dict){ 
                            success(dict); 
                        } 
                    }
                    
                } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                    
                    //失败的处理
                    [AFNetworkRequest requestFailed:error];
                    if(failure){
                        failure(error);
                    }
                    
                }];
            }   break;
                //DELETE 方法
            case Request_DELETE:{
                [manager DELETE:url parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    
                    //请求成功的操作    
                    if (success) { 
                        NSDictionary *dict = [NSJSONSerialization  JSONObjectWithData:responseObject options:0 error:NULL]; 
                        if(dict){ 
                            success(dict); 
                        } 
                    }
                    
                } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                    
                    //失败的处理
                    [AFNetworkRequest requestFailed:error];
                    if(failure){
                        failure(error);
                    }
                    
                }];
            }   break;
                
            default:
                break;
        }
    }
     
    
    

    相关文章

      网友评论

      • 梁森的简书:put、patch、delete这三个方法工作中用过吗? 常用的场景是? 我在工作中还没有用过
        梁森的简书:@冒泡丸子 是对我的问题的回答吗?感觉一脸懵逼:smile:。 我想问的是比如POST常用来上传数据 那像put 它们呢?
        Luy7788:这其实是一种规范,类似增删查改
      • keyuan0214:代码有问题啊,.m文件复制下来都是报错
        朱朱001:@冒泡丸子没有demo吗?你写的有问题
        Luy7788:这部分代码里面的ALERT_SHOW()提示方法需要自己实现,那时候只放上来请求部分相关代码

      本文标题:简单封装AFNetworking:post、get、put、pa

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