iOS开发文集

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

2016-06-06  本文已影响1183人  Luy7788

最近基于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;
    }
}
 

上一篇下一篇

猜你喜欢

热点阅读