AFNetworking 框架封装
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 框架封装相关推荐
- iOS swift Alamofire+HandyJSON网络框架封装
iOS swift Alamofire+HandyJSON网络框架封装 我们在学习Objective_C时使用的网络框架是AFNetworking+MJExtension,而在swift中Alamof ...
- iOS 走近商城 APP(三 WKWebView 商品规格选择框架封装)
原文链接:http://www.jianshu.com/p/293ee1bfe104 商城 -- 由 3033 分享 开篇 忽然发现最近也只有值班才能写东西了,中间更新了两篇其他的断了下商城相关的文章 ...
- 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
OkHttp 系列文章目录 [OkHttp]OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 ) [OkHttp]Android 项目导入 OkHttp ( 配置依赖 | 配置 ...
- 利用Spring框架封装的JavaMail现实同步或异步邮件发送
利用Spring框架封装的JavaMail现实同步或异步邮件发送 作者:张纪豪 J2EE简单地讲是在JDK上扩展了各类应用的标准规范,邮件处理便是其中一个重要的应用.它既然是规范,那么我们就可以通过J ...
- 基于AFNetworking的封装的工具类
基于AFNetworking的封装的工具类MXERequestService // // MXERequestService.h // testAFNetWorking // // Created b ...
- IOS中的AFNetworking框架的GET参数的使用
IOS中的AFNetworking框架的GET参数的使用 加入ATS在info.plist 中加入ATS代码 <key>NSAppTransportSecurity</key> ...
- IOS开发基础之使用AFNetworking框架下载服务器资源图片
IOS开发基础之使用AFNetworking框架下载服务器资源图片 info.plist加入这句 <key>NSAppTransportSecurity</key> <d ...
- IOS开发基础之使用AFNetworking框架实现xml文件的解析
IOS开发基础之使用AFNetworking框架实现xml文件的解析 info.plist加入这行代码 <key>NSAppTransportSecurity</key> &l ...
- IOS开发基础之使用AFNetworking框架实现文件上传get和post请求
IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...
最新文章
- 企业信息化中常见决策点应对
- 14 款命令行常用工具的替代品!
- 编写Java 制作留言板_JSP+Servlet+JavaBean制作简单留言板
- 论字符界面和WEB界面配置的优缺点
- ARM、Intel、MIPS处理器的区别
- 软件设计是决定软件性能的关键
- 中国SaaS死或生之二:ERP两大邪术,尽出歪门邪路
- 均方误差越大越好_超详细 | 如何写好计量经济学实证分析论文?
- Flink on Zeppelin (4) - 机器学习篇
- 美团靠外卖和到店业务赚来的钱
- LeetCode刷题目录
- 直插式电阻电容封装与尺寸图…
- 计算机流体力学:CFD
- es 中 mapping 简介
- 可以测试电脑网络速度的软件,介绍4种有用的Internet Speed软件应用程序,用于测试网络速度软件...
- 机器学习之回归与分类
- 【论文简述及翻译】PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume(CVPR 2018)
- 【Vue】学习笔记-组件传值的数据累加器
- java:java8新特性(Lambda 表达式、方法引用、构造器引用、数组引用、Stream API)
- 【狂云歌之unity_vr】unity项目持续集成dailybuild以及多平台打包管理