AFN的再封装

首先建一个公共类, 里面放类方法, 作为项目中公共使用方法的集合.

//1.  PublicWay.h

#import <Foundation/Foundation.h>
#import "AFNetworking.h"


@interface PublicWay : NSObject


#pragma mark - POST请求
+ (void)POST:(NSString *)urlString
  parameters:(NSDictionary *)parameters
    progress:(void (^)(NSProgress *progress))progress
     success:(void (^)(id responseObject))success
     failure:(void (^)(NSError *error))failure;

@end


// 2. PublicWay.m

@implementation PublicWay

+ (void)POST:(NSString *)urlString
  parameters:(NSDictionary *)parameters
       progress:(void (^)(NSProgress *progress))progress
     success:(void (^)(id responseObject))success
     failure:(void (^)(NSError *error))failure {
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer.timeoutInterval = 12.f;
    
    //设置支持的数据类型
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
    [manager POST:urlString parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
        if (progress) {
            progress(uploadProgress);
        }
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (success) {           
                success(responseObject);
            }
        }

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failure) {
            
            failure(error);
        }
    }];
    
}

@end


3. 调用:

    NSString *url = xxxxx;
    NSDictionary *parameters = @{@"xxx" : xxxx};
    [PublicWay POST:url parameters:parameters progress:nil success:^(id responseObject) {      
          
        
    } failure:^(NSError *error) {
        XWLog(@"请求失败, error:%@", error);
    }];

4.好处: AFN是项目中使用最频繁的类, 封装起来不仅减少调用的代码, 更有意想不到的大用处, 需要对请求数据进行统一处理时, 就可以在这一个方法中处理了, 不必一个个修改.例如, 用户正在使用app, 但你这个用户忽然被管理人员删除了, 要想进行提示, 就可以在获取到请求返回数据的信息后, 弹出提示框.进行相应的处理.

+ (void)POST:(NSString *)urlString
  parameters:(NSDictionary *)parameters
       progress:(void (^)(NSProgress *progress))progress
     success:(void (^)(id responseObject))success
     failure:(void (^)(NSError *error))failure {
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer.timeoutInterval = 12.f;
    
    //设置支持的数据类型
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
    [manager POST:urlString parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) {
        if (progress) {
            progress(uploadProgress);
        }
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (success) {
            
            //如果已被删除, 提示退出还是切换账号
            if ([responseObject[@"code"] intValue] == 444) {
                AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
                [app showDeletedAlert];              
                
            } else {
                success(responseObject);
            }
        }

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failure) {
            
            failure(error);
        }
    }];
    
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值