iOS 封装网络请求工具类(基于AFNetworking)

为什么要封装.png

一.封装的好处

  • 可以降低网络请求方法与Controller(控制器)的耦合度,即使网络使用的第三方框架发生不兼容、错误等问题从而想换框架时,也不用到每个控制器里面改代码(50、60页面会改到想哭).
  • 建立单例工具类,方便管理
  • 优化代码结构

二.网络请求工具类(OC)

1.导入框架和创建类

1).先导入第三方库AFNetworking
2).建立NetworkTool类继承于AFHTTPSessionManager,继承于AFHTTPSessionManager的原因是发送请求需要调用到manager,而直接继承于AFHTTPSessionManager可以直接调用内部的方法

2.添加网络请求方法和实现

1).方法声明

  • 首先确定要传入的参数,有网址、请求参数、GET/POST方法,当网络请求成功后,会有responseObject回调,所以还需要传入一个block
/**
 创建网络请求工具类的单例
 */
+ (instancetype)sharedTool;

/**
 创建请求方法
 */
- (void)requestWithURLString: (NSString *)URLString
                  parameters: (NSDictionary *)parameters
                      method: (NSString *)method
                    callBack: (void(^)(id responseObject))callBack;

2).方法实现

单例
+ (instancetype)sharedTool {
    static id instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] initWithBaseURL:nil];
    });
    
    return instance;
}
网络请求方法
- (void)requestWithURLString: (NSString *)URLString
                  parameters: (NSDictionary *)parameters
                      method: (NSString *)method
                    callBack: (void (^)(id))callBack {
    
    //判断请求方法是GET还是POST
    if ([method isEqualToString:@"GET"]) {
        //调用AFN框架的方法
        [self GET:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            //如果请求成功,则回调responseObject
            callBack(responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            //如果请求失败,控制台打印错误信息
            NSLog(@"%@",error);
        }];
    }
    
    if ([method isEqualToString:@"POST"]) {
        [self POST:URLString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            callBack(responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"%@",error);
        }];
    }
}

三.网络请求工具类(Swift)

1.新建SwiftNetworkTool.swift文件,SwiftNetworkTool类继承于AFHTTPSessionManager

网络请求工具类(Swift).png

2.Swift版简洁好用,直接上代码

//单例
    static let shared = SwiftNetworkTool()
    
    //网络中间层的接口方法
    func request(urlString: String, parameters: [String: Any]? = nil, method: String, callBack: @escaping (_ responseObject: Any?) -> ()) {
        
        //网络请求成功的闭包
        let succes = {
            (task: URLSessionDataTask, response: Any?) in
            callBack(response)
        }
        
        //网络请求失败的闭包
        let failure = {
            (task: URLSessionDataTask?, error: Error) in
            print("\(error)")
            callBack(nil)
        }
        
        if method == "GET" {
            self.get(urlString, parameters: parameters, progress: nil, success: succes, failure: failure)
        }
        
        if method == "POST" {
            self.post(urlString, parameters: parameters, progress: nil, success: succes, failure: failure)
        }
    }

总结:鉴于公司请求的东西很多,所以只封了这些方法,以后遇到别的可以继续加。
网络请求工具类源码地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,200评论 4 61
  • 看清这个世界然后爱它?不如在快要看清之前及时打住,会保留更多美好与轻松!
    往226阅读 135评论 0 0
  • 前言 其实早应该翻译三叉神经痛了,因为这是过去一年我所在的西典门诊主要治疗的疾病之一。三叉神经痛号称“天下第一痛”...
    付维亮阅读 1,566评论 0 0
  • 1.form表单提交的安全机制: Django不允许对form表单进行随意的提交,会提示403的错误,要想成功对表...
    我是一条池中鱼阅读 650评论 0 0