1. OC 的封装
  1.1 使用 pod 方法下载库 pod init ->pod install --repo-update
  1.2 Podfile 文件

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'target '封装AFN框架' do# Comment the next line if you don't want to use dynamic frameworksuse_frameworks!pod 'AFNetworking'# Pods for 封装AFN框架
end

1.3 创建 NetworkTool文件
        NetworkTool.h文件

#import <Foundation/Foundation.h>
#import <AFNetworking.h>NS_ASSUME_NONNULL_BEGIN//网络请求枚举
typedef enum : NSUInteger {GET,POST
} RequestMethod;@interface NetworkTools : AFHTTPSessionManager+(instancetype)sharedTools;-(void) request:(RequestMethod)method URLString:(NSString *)URLString parameters:(nullable id)parameters finished:(void (^)(id result, NSError *error))finished;@endNS_ASSUME_NONNULL_END

NetworkTool.m文件

#import "NetworkTools.h"//网络工具协议
@protocol NetworkToolsProxy <NSObject>//此方法 AFNetworking 以提供 (供参考)
@optional
- (nullable NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)methodURLString:(NSString *)URLStringparameters:(nullable id)parametersheaders:(nullable NSDictionary <NSString *, NSString *> *)headersuploadProgress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressdownloadProgress:(nullable void (^)(NSProgress *downloadProgress))downloadProgresssuccess:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successfailure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;
@end//遵守网络协议,意味着有提示
@interface NetworkTools() <NetworkToolsProxy>
@end@implementation NetworkTools+(instancetype) sharedTools{static NetworkTools *tools;static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{//注意:末尾需要包含 '/'NSURL *baseUrl = [NSURL URLWithString:@"http://httpbin.org/"];tools = [[self alloc]initWithBaseURL:baseUrl];//设置反序列化格式tools.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil];});return tools;
}-(void) request:(RequestMethod)method URLString:(NSString *)URLString parameters:(nullable id)parameters finished:(void (^)(id result, NSError *error))finished{NSString *methodName = (method == GET) ? @"GET": @"POST";// dataTaskWithHTTPMethod 本类没有实现方法,但父类实现了// 在调用方法的时候,如果本类没有提供,就直接调用父类的方法,AFN 内部已经实现NSURLSessionDataTask *dataTask = [self dataTaskWithHTTPMethod:methodName URLString:URLString parameters:parameters headers:nil uploadProgress:nil downloadProgress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {finished(responseObject,nil);} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {finished(nil,error);NSLog(@"%@",error);}];[dataTask resume];
}
@end

1.4 调用

#import "ViewController.h"
#import "NetworkTools.h"
@interface ViewController ()
@end@implementation ViewController/**ANF  最常见的网络请求错误1.不支持的内容 status code =  200 ,需要修改反序列化的 NSSet2.*/
- (void)viewDidLoad {[super viewDidLoad];[self testPost];[self testGet];
}-(void)testPost{//@{@"name": @"zhangsan",@"age": @22}[[NetworkTools sharedTools]request:POST URLString:@"http://httpbin.org/post" parameters:NULL finished:^(id  _Nonnull result, NSError * _Nonnull error) {if(error != nil){NSLog(@"出错了");return;}NSLog(@"%@",result);}];
}-(void)testGet{[[NetworkTools sharedTools]request:GET URLString:@"http://httpbin.org/get" parameters:NULL finished:^(id  _Nonnull result, NSError * _Nonnull error) {if(error != nil){NSLog(@"出错了");return;}NSLog(@"%@",result);}];
}
@end

2. Swift 的封装 
  2.1 使用 CocoaPad 的命令下载库,终端切换到项目文件夹,执行 pod init -> pod install --repo-update
  2.2 得到 Podfile 文件,加入 pod 'AFNetworking' , 终端 pod update

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'target 'AFN Swift' do# Comment the next line if you don't want to use dynamic frameworksuse_frameworks!pod 'AFNetworking'# Pods for AFN Swift
end

2.3 创建 NetworkTools.swift 文件

import UIKit
import AFNetworking///请求方法枚举
enum RequestMethod: String {case GET = "GET"case POST = "POST"
}//MARK: - 网络工具
class NetworkTools: AFHTTPSessionManager {//单例static let sharedTools:NetworkTools = {let tools = NetworkTools(baseURL: nil)//设置反序列化数据格式 - 系统会自动将 OC 框架中的 NSSet 转换成 Settools.responseSerializer.acceptableContentTypes?.insert("text/html")return tools}()
}//MARK: - 封装 AFN 网络方法
extension NetworkTools{/// 网络请求/// - Parameters:///   - method: GET / POST///   - URLString: URLString///   - parameters: 参数字典///   - finished: 完成回调func request(method: RequestMethod, URLString: String, parameters: [String: Any]?, finished: @escaping (_ result: Any?, _ error: Error?) -> ()){let methodName = (method == .GET) ? "GET" : "POST"dataTask(withHTTPMethod: methodName, urlString: URLString, parameters: parameters, headers: nil, uploadProgress: nil, downloadProgress: nil) { _, result infinished(result,nil)} failure: { _, error inprint(error)finished(nil,error)}?.resume()}/// 网络请求/// - Parameters:///   - method: GET / POST///   - URLString: URLString///   - parameters: 请求参数///   - headers: 协议头参数///   - finished: 完成回调func request(method: RequestMethod, URLString: String, parameters: [String: Any]?, headers: [String: String]?, finished: @escaping (_ result: Any?, _ error: Error?)->()){//定义成功回调let success = { (task: URLSessionDataTask, result: Any?) infinished(result,nil)}//定义失败回调let failure = {(task: URLSessionDataTask?, error: Error) infinished(nil,error)}if(method == .GET){get(URLString, parameters: parameters, headers: headers, progress: nil, success: success, failure: failure)}else{post(URLString, parameters: parameters, headers: headers, progress: nil, success: success, failure: failure)}}
}

2.4 调用

import UIKitclass ViewController: UIViewController {override func viewDidLoad() {super.viewDidLoad()testGet()testPost()}/// 测试Get 方法func testGet(){NetworkTools.sharedTools.request(method: .GET, URLString: "http://httpbin.org/get", parameters: ["name":"zhangsan", "age": 20]) { result, error inprint(result ?? "")}}/// 测试Post 方法func testPost(){NetworkTools.sharedTools.request(method: .POST, URLString: "http://httpbin.org/post", parameters: ["name":"lisi", "age": 17]) { result, error inprint(result ?? "")}}
}

3. info.plist 文件中,加上 ATS 设置,否则报错

<key>NSAppTransportSecurity</key>
<dict><!--Include to allow all connections (DANGER)--><key>NSAllowsArbitraryLoads</key><true/>
</dict>

AFNetworking 框架封装相关推荐

  1. iOS swift Alamofire+HandyJSON网络框架封装

    iOS swift Alamofire+HandyJSON网络框架封装 我们在学习Objective_C时使用的网络框架是AFNetworking+MJExtension,而在swift中Alamof ...

  2. iOS 走近商城 APP(三 WKWebView 商品规格选择框架封装)

    原文链接:http://www.jianshu.com/p/293ee1bfe104 商城 -- 由 3033 分享 开篇 忽然发现最近也只有值班才能写东西了,中间更新了两篇其他的断了下商城相关的文章 ...

  3. 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )

    OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...

  4. 利用Spring框架封装的JavaMail现实同步或异步邮件发送

    利用Spring框架封装的JavaMail现实同步或异步邮件发送 作者:张纪豪 J2EE简单地讲是在JDK上扩展了各类应用的标准规范,邮件处理便是其中一个重要的应用.它既然是规范,那么我们就可以通过J ...

  5. 基于AFNetworking的封装的工具类

    基于AFNetworking的封装的工具类MXERequestService // // MXERequestService.h // testAFNetWorking // // Created b ...

  6. IOS中的AFNetworking框架的GET参数的使用

    IOS中的AFNetworking框架的GET参数的使用 加入ATS在info.plist 中加入ATS代码 <key>NSAppTransportSecurity</key> ...

  7. IOS开发基础之使用AFNetworking框架下载服务器资源图片

    IOS开发基础之使用AFNetworking框架下载服务器资源图片 info.plist加入这句 <key>NSAppTransportSecurity</key> <d ...

  8. IOS开发基础之使用AFNetworking框架实现xml文件的解析

    IOS开发基础之使用AFNetworking框架实现xml文件的解析 info.plist加入这行代码 <key>NSAppTransportSecurity</key> &l ...

  9. IOS开发基础之使用AFNetworking框架实现文件上传get和post请求

    IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...

最新文章

  1. 企业信息化中常见决策点应对
  2. 14 款命令行常用工具的替代品!
  3. 编写Java 制作留言板_JSP+Servlet+JavaBean制作简单留言板
  4. 论字符界面和WEB界面配置的优缺点
  5. ARM、Intel、MIPS处理器的区别
  6. 软件设计是决定软件性能的关键
  7. 中国SaaS死或生之二:ERP两大邪术,尽出歪门邪路
  8. 均方误差越大越好_超详细 | 如何写好计量经济学实证分析论文?
  9. Flink on Zeppelin (4) - 机器学习篇
  10. 美团靠外卖和到店业务赚来的钱
  11. LeetCode刷题目录
  12. 直插式电阻电容封装与尺寸图…
  13. 计算机流体力学:CFD
  14. es 中 mapping 简介
  15. 可以测试电脑网络速度的软件,介绍4种有用的Internet Speed软件应用程序,用于测试网络速度软件...
  16. 机器学习之回归与分类
  17. 【论文简述及翻译】PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume(CVPR 2018)
  18. 【Vue】学习笔记-组件传值的数据累加器
  19. java:java8新特性(Lambda 表达式、方法引用、构造器引用、数组引用、Stream API)
  20. 【狂云歌之unity_vr】unity项目持续集成dailybuild以及多平台打包管理

热门文章

  1. jxls对比_罗技MX Keys与K780对比
  2. C语言浮点型精度缺失解决
  3. 实例图解设计模式之面向对象设计七大原则
  4. usb系统拓扑结构和usb设备逻辑结构
  5. 静电等级管理中的HBM CDM MM
  6. Python学生管理系统代码
  7. Git管理工具对比(GitBash、EGit、SourceTree)
  8. 从SIP抓包中查看DTMF频率
  9. ChatGPT最强对手!Claude,无需魔法,无需等待,直接可用!
  10. [zz]收藏的JAVA面试题大全