iOS 【OC 封装网络请求业务类(AFHTTPRequestOperationManager 废弃)】

对于一些常用的第三方,他们常用,自然作者也会经常更新。这样一来或许会出现“牵一发而动全身的局面”。一旦一个方法、某个类出现了名称或者功能上的改动,那么如果在项目中多处地方引用了这个不稳定的第三方,是很麻烦的事情。下面我总结归纳了一下封装第三方框架调用的方法。

以AFNetworking为例,这是是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库。下面我们封装一下他的调用接口。

下面是我们封装的类WZYHTTPTool

//
//  WZYHTTPTool.h
//

#import <Foundation/Foundation.h>

@interface WZYHTTPTool : NSObject

+ (void)post:(NSString *)url params:(id)params success:(void (^)(id json))success failure:(void (^)(NSError *error))failure;

+ (void)get:(NSString *)url params:(id)params success:(void (^)(id json))success failure:(void (^)(NSError *error))failure;

@end

#import "WZYHTTPTool.h"
#import "AFNetworking.h"

@implementation WZYHTTPTool

+ (void)post:(NSString *)url params:(id)params success:(void (^)(id json))success failure:(void (^)(NSError *error))failure
{
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    
    [mgr POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        if (success) {
            success(responseObject);
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        if (failure) {
            failure(error);
        }
    }];
}

+ (void)get:(NSString *)url params:(id)params success:(void (^)(id json))success failure:(void (^)(NSError *error))failure
{
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    
    [mgr GET:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        if (success) {
            success(responseObject);
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        if (failure) {
            failure(error);
        }
    }];
}

@end

我们发现其实他和我们方法内部调用的AFHTTPRequestOperation的方法是很像的。是的,没错,就是很像,但这样起到了一个很好的保护作用。如果我们的AFNetworking发生了更新,那么受到影响的不过也就是我们的WZYHTTPTool这一个类而已,我们只需要在这个类中进行一系列的修改。这样保证了我们的项目源文件中没有直接和外来的第三方框架相接触。起到了保护的作用。下面展示一出项目中用到封装之后的WZYHTTPTool类的地方。
- (void)accessTokenWithCode:(NSString *)code
{
    // 1、拼接请求参数
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
   
    params[@"client_id"] = @"717984953";
    params[@"client_secret"] = @"afc15faec72d4b5d41d17d666dbdc39c";
    params[@"grant_type"] = @"authorization_code";
    params[@"code"] = code;
    params[@"redirect_uri"] = @"http://";

    // 2、发送请求
    [WZYHTTPTool post:@"https://api.weibo.com/oauth2/access_token" params:params success:^(id json) {
        [MBProgressHUD hideHUD];
        
        WZYAccount *account = [WZYAccount accountWithDictionary:json];
        
        // 存储账号信息
        [WZYAccountTool saveAccount:account];
        
        // 切换根控制器
        UIWindow *window = [UIApplication sharedApplication].keyWindow;
        [window switchRootViewController];
    } failure:^(NSError *error) {
        WZYLog(@"请求失败-%@",error);
        [MBProgressHUD hideHUD];
    }];
}

在我们封装好的方法中,我们只需要将我们需要的参数传进来,传给block变量(传进来的是block里面那一大坨东西),可以理解成将他们搬到了另外一个类下执行。由此做到控制器不和第三方直接接触即可实现功能。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值