iOS网络请求工具oc版,swift版基于AFNetworking的简单封装
来源:互联网 发布:mui框架 js自动加载 编辑:程序博客网 时间:2024/05/21 21:37
1.为什么要封装
对于AFNetworking
的使用,相信大多数的公司都会用到,毕竟开源框架,安全高效.为了提高效率和代码的可维护性,我们就要二次封装AFN
.
2,以前遇到问题
一个老项目,需要进行IPV6
的迁移(虽然老版本的AFN
也支持IPV6
),但是方法变了,之前没有封装AFN
,项目中用到AFN
请求的地方有很多,接口上千,那么AFN
出现的地方就上千个.更新AFN
后,不支持老方法了,需要用新的方法,则需要替换上千个方法,这是个很大的工作量.这时封装的好处就体现出来了,只需改一处.
3,如何解决的
如标题所示,那就是二次封装AFNetworking
重点在下面了
AFNetworking的封装:OC版
首先如下,别问为什么......
cocoapods pod 'AFNetworking'
注意点
- 共享
AFHTTPSessionManager
对象,而不是每次新建SessionManager
为什么要共享?给你们科普一下:HTTP
协议是基于TCP
协议的,所以在每次的HTTP
请求之前,客户端和服务器端,都先需要经过TCP
连接的三次握手,即每次请求之前,网络的数据都已经在客户端和服务器端之间来回了三次 如下图:
所以这样做的目的就是提高请求效率,所以我是这么做的,请看下一步
- ok,坐稳开车了
1.创建单例请求对象
创建一个类继承自AFHTTPSessionManager
,如下:
2.封装方法
- 封装了几个常用的方法:get,post,上传,下载这几个方法,
为什么用类方法?因为使用起来简单啊!!!
@interface AFNHelper : AFHTTPSessionManager//单例+ (AFNHelper *)sharedManager;/** * get请求 * * @param url 接口url * @param parameters 参数 * @param success 请求成功的block * @param failure 请求失败的block */+ (void)get:(NSString *)url parameter:(id )parameters success:(void(^)(id responseObject))success faliure:(void(^)(id error))failure;/** * post请求 * * @param url 接口url * @param parameters 参数 * @param success 请求成功的block * @param failure 请求失败的block */+ (void)post:(NSString *)url parameters:(id)parameters success:(void(^)(id responseObject))success faliure:(void(^)(id error))failure;/** * post请求 不拼接基地址 * * @param url 接口url * @param parameters 参数 * @param success 请求成功的block * @param failure 请求失败的block */+ (void)postNoBaseUrl:(NSString *)url parameters:(id)parameters success:(void(^)(id responseObject))success faliure:(void(^)(id error))failure;/** * 文件上传 * * @param url 接口url * @param parameters 参数 * @param block 图片data * @param success 请求成功的block * @param failure 请求失败的block */+ (void )post:(NSString *)url parameters:(id)parameters constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block success:(void (^)(id responseObject))success faliure:(void (^)(id error))failure;/** * 文件下载 * * @param request 下载请求 * @param ProgressBlock 下载进度block * @param savePath 储存路径 * @param failure 下载失败block */+ (void)downloadTaskWithUrl:(NSString *)url progress:(void (^)(id downloadProgress))ProgressBlock savePath:(NSString *)savePath completionHandler:(void (^)(NSURLResponse *response ,NSURL *filePath))completion error:(void (^)(id error))failure;
- .m的实现如下
BaseUrl
是宏
#import "AFNHelper.h"@implementation AFNHelper//单例实现+ (AFNHelper *)sharedManager { static AFNHelper *handle = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ handle = [AFNHelper manager]; // 设置可接受的类型 handle.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"application/json",@"text/json",@"text/javascript",@"text/html",nil]; }); return handle;}//get请求+ (void )get:(NSString *)url parameter:(id)parameters success:(void (^)(id responseObject))success faliure:(void (^)(id error))failure{ [[AFNHelper sharedManager] GET:[BaseUrl stringByAppendingString:url] parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if(responseObject) { success(responseObject); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { failure(error); }];}//post请求+ (void)post:(NSString *)url parameters:(id)parameters success:(void(^)(id responseObject))success faliure:(void(^)(id error))failure { [[AFNHelper sharedManager] POST:[BaseUrl stringByAppendingString:url] parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if(responseObject) { success(responseObject); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { failure(error); }];}//文件上传+ (void )post:(NSString *)url parameters:(id)parameters constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block success:(void (^)(id responseObject))success faliure:(void (^)(id error))failure{ [[AFNHelper sharedManager] POST:[BaseUrl stringByAppendingString:url] parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { block(formData); } progress:^(NSProgress * _Nonnull uploadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if(responseObject) { success(responseObject); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { failure(error); }];}//文件下载+ (void)downloadTaskWithUrl:(NSString *)url progress:(void (^)(id downloadProgress))ProgressBlock savePath:(NSString *)savePath completionHandler:(void (^)(NSURLResponse *response ,NSURL *filePath))completion error:(void (^)(id error))failure{//创建请求 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[BaseUrl stringByAppendingString:url]]];//创建任务 NSURLSessionDownloadTask *download = [[AFNHelper sharedManager] downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { if (downloadProgress) { ProgressBlock(downloadProgress); } } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { return [NSURL fileURLWithPath:savePath]; }completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { if (!error) { completion(response,filePath); } else { failure(error); } }];//开启任务 [download resume]; }@end
3.如何使用
这样的话OC的基本上封装的实现就可以了
AFNetworking的封装:swift版
- swift的基本语法,我就不多说了,能用到这个的,肯定能看懂语法.....
同上 cocoapods pod 'AFNetworking'
1.创建单例请求对象
创建一个类继承自AFHTTPSessionManager
,如下:
2.具体实现方法 也是常用的四个方法
/** get请求 - parameter urlString: 请求的url - parameter parameters: 请求的参数 - parameter success: 请求成功回调 - parameter failure: 请求失败回调 */ class func get(urlString:String,parameters:AnyObject?,success:((responseObject:AnyObject?) -> Void)?,failure:((error:NSError) -> Void)?) -> Void { AFNHelper.shareManager.GET(urlString, parameters: parameters, progress: { (progress) in }, success: { (task, responseObject) in //如果responseObject不为空时 if responseObject != nil { success!(responseObject:responseObject) } }) { (task, error) in failure!(error:error) } } /** post请求 - parameter urlString: 请求的url - parameter parameters: 请求的参数 - parameter success: 请求成功回调 - parameter failure: 请求失败回调 */ class func post(urlString:String,parameters:AnyObject?,success:((responseObject:AnyObject?) -> Void)?,failure:((error:NSError) -> Void)?) -> Void { AFNHelper.shareManager.POST(urlString, parameters: parameters, progress: { (progress) in }, success: { (task, responseObject) in //如果responseObject不为空时 if responseObject != nil { success!(responseObject:responseObject) } }) { (task, error) in failure!(error:error) } } /** 文件上传 - parameter urlString: 请求的url - parameter parameters: 请求的参数 - parameter constructingBodyWithBlock: 文件data - parameter uploadProgress: 上传进度 - parameter success: 请求成功回调 - parameter failure: 请求失败回调 */ class func POST(urlString: String, parameters: AnyObject?, constructingBodyWithBlock:((formData:AFMultipartFormData) -> Void)?, uploadProgress: ((progress:NSProgress) -> Void)?, success: ((responseObject:AnyObject?) -> Void)?, failure: ((error: NSError) -> Void)?) -> Void { AFNHelper.shareManager.POST(urlString, parameters: parameters, constructingBodyWithBlock: { (formData) in constructingBodyWithBlock!(formData:formData) }, progress: { (progress) in uploadProgress!(progress:progress) }, success: { (task, objc) in if objc != nil { success!(responseObject:objc) } }) { (task, error) in failure!(error:error) } } /** 下载文件 - parameter request: 请求的request - parameter downloadProgressBlock: 下载的进度 - parameter savePath: 存储路径 - parameter completionHandler: 完成后回调 */ class func downloadTaskWithRequest(request: NSURLRequest, downloadProgressBlock: ((downloadProgress :NSProgress) -> Void)?, savePath: String,completionHandler:((response:NSURLResponse, error:NSError?) -> Void)?) -> Void{ //创建下载任务 let task = AFNHelper.shareManager.downloadTaskWithRequest(request, progress: { (progress) in downloadProgressBlock!(downloadProgress:progress) }, destination: { (url, response) -> NSURL in return NSURL(fileURLWithPath: savePath) }) { (response, url, error) in if (error == nil) { completionHandler!(response:response ,error:error) } } //开启下载 task.resume() }
3.如何使用
截个图吧 如下:
0 0
- iOS网络请求工具oc版,swift版基于AFNetworking的简单封装
- iOS网络请求工具oc版,swift版基于AFNetworking的简单封装
- IOS 开发 AFNetworking 网络工具-网络请求的三次封装 OC版
- IOS 开发 AFNetworking 网络工具-网络请求的三次封装 Swift版
- 基于AFNetworking封装的网络请求工具类
- 基于AFNetworking封装的网络请求工具类【转载】
- iOS开发之网络请求(基于AFNetworking的再封装)
- iOS开发之网络请求(基于AFNetworking的再封装)
- iOS AFNetworking封装的网络请求
- Swift版的网络请求封装
- 基于OkHttpUtils网络请求的二次封装(简单版)
- Swift 中的网络请求问题 OC(AFNetworking) && Swift(Alamofire)
- 基于AFNetWorking的网络封装
- iOS 数据请求类AFNetworking 简单封装
- iOS开发: AFNetworking网络请求:NSURLSession版
- 封装网络请求(AFNetworking)
- swift中对AFNetWorking的简单封装
- Swift 2.3 【封装网络请求业务类 AFNetworking/ Alamofire】
- 敏感词库
- 【WHUST 2016 Individual Contest #2】解题报告
- c/c++第一天
- 【经典算法】——KMP,深入讲解next数组的求解
- 【solr 基础篇三】SolrJ的入门使用
- iOS网络请求工具oc版,swift版基于AFNetworking的简单封装
- 浅谈WebService SOAP、Restful、HTTP(post/get)请求
- 【那些遇到的坑】—hadoop完全分布式集群搭建启动一直处于starting namenode
- Password authentication failed, Please verify that the username and password are correct
- 源码分析-java-ArrayList-基本方法及实现
- HDU 1237 简单计算器 (栈)
- jsp数据库基础之---jsp与MySQL数据库的连接
- mysql建立外键约束
- IOS设备的三种分辨率