总结了一下AFN3.0封装,也借鉴了其他人总结的,整理如下,希望多交流,互相进步
//
// XJYSessionManager.h//
// Created by XJY on 16/10/17.
// Copyright © 2016年 XinJinYing. All rights reserved.
// #import <AFNetworking/AFNetworking.h> /**
* 宏定义请求成功的block
*
* @param responseObject 请求成功返回的数据
*/
typedef void(^XJYResponseSuccess)(NSURLSessionDataTask *task, id responseObject); /**
* 宏定义请求失败的block
*
* @param error 报错信息
*/
typedef void(^XJYResponseFail)(NSURLSessionDataTask *task, NSError *error); /**
* 上传或者下载的进度
*
* @param progress 进度
*/
typedef void(^XJYProgress)(NSProgress *progress); @interface XJYSessionManager : AFHTTPSessionManager //单例
+ (XJYSessionManager *)shareInstance; /**
* 普通get方法请求网络数据
*
* @param url 请求网址路径
* @param params 请求参数
* @param success 成功回调
* @param fail 失败回调
*/
+ (void)GET:(NSString *)url params:(NSDictionary *)params success:(XJYResponseSuccess)success fail:(XJYResponseFail)fail; //判断网络状态
+ (XJYSessionManager *)haveNetWork; /**
* 普通post方法请求网络数据
*
* @param url 请求网址路径
* @param params 请求参数
* @param success 成功回调
* @param fail 失败回调
*/
+ (void)POST:(NSString *)url params:(NSDictionary *)params success:(XJYResponseSuccess)success fail:(XJYResponseFail)fail; /**
* 普通路径上传文件
*
* @param url 请求网址路径
* @param params 请求参数
* @param filedata 文件
* @param name 指定参数名
* @param fileName 文件名(要有后缀名)
* @param mimeType 文件类型
* @param progress 上传进度
* @param success 成功回调
* @param fail 失败回调
*/ + (void)uploadWithURL:(NSString *)url
params:(NSDictionary *)params
fileData:(NSData *)filedata
name:(NSString *)name
fileName:(NSString *)fileName
mimeType:(NSString *)mimeType
progress:(XJYProgress)progress
success:(XJYResponseSuccess)success
fail:(XJYResponseFail)fail; /**
* 下载文件
*
* @param url 请求网络路径
* @param fileURL 保存文件url
* @param progress 下载进度
* @param success 成功回调
* @param fail 失败回调
*
* @return 返回NSURLSessionDownloadTask实例,可用于暂停继续,暂停调用suspend方法,重新开启下载调用resume方法
*/
+ (NSURLSessionDownloadTask *)downloadWithURL:(NSString *)url savePathURL:(NSURL *)fileURL progress:(XJYProgress)progress success:(void (^)(NSURLResponse *, NSURL *))success fail:(void (^)(NSError *))fail; @end
//
// XJYSessionManager.m//
// Created by XJY on 16/10/17.
// Copyright © 2016年 XinJinYing. All rights reserved.
// #import "XJYSessionManager.h" static int const DEFAULT_REQUEST_TIME_OUT = ; @implementation XJYSessionManager #pragma mark - 实例化Manager
static XJYSessionManager *shareInstance = nil;
+ (XJYSessionManager *)shareInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shareInstance = [[self alloc] init];
});
return shareInstance;
} + (id)allocWithZone:(struct _NSZone *)zone
{
if (shareInstance == nil) {
shareInstance = [super allocWithZone:zone];
}
return shareInstance;
} - (id)copyWithZone:(NSZone *)zone
{
return shareInstance;
} - (instancetype)init
{
self = [super init];
if (self) {
//初始化一些参数
self.responseSerializer = [AFJSONResponseSerializer serializer];
self.requestSerializer = [AFJSONRequestSerializer serializer];
self.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html", @"text/json", @"text/javascript",@"application/x-javascript",@"text/plain",@"image/gif",nil];
self.reachabilityManager = [AFNetworkReachabilityManager sharedManager];
[[self requestSerializer] setTimeoutInterval:DEFAULT_REQUEST_TIME_OUT];
}
return self;
} #pragma mark - 判断使用什么网络
+ (XJYSessionManager *)haveNetWork
{
static NSString *const stringURL = @"https://www.baidu.com/";
NSURL *baseURL = [NSURL URLWithString:stringURL];
XJYSessionManager *manager = [[XJYSessionManager alloc] initWithBaseURL:baseURL];
NSOperationQueue *operationQueue = manager.operationQueue;
[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
case AFNetworkReachabilityStatusReachableViaWWAN:
NSLog(@"WWAN");
break;
case AFNetworkReachabilityStatusReachableViaWiFi:
{
NSLog(@"WiFi");
[operationQueue setSuspended:NO];
}
break;
case AFNetworkReachabilityStatusNotReachable:
{
NSLog(@"无网络");
if (kPLIOS7) {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"提示" message:@"亲,您没网啦" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *alertAction = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:alertAction];
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil]; } else {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"亲,您没网啦" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
[alertView show];
} }
default:
[operationQueue setSuspended:YES];
break;
}
}];
//开始监控
[manager.reachabilityManager startMonitoring];
return manager;
} #pragma mark - 解析数据
+ (id)responseConfiguration:(id)responseObject
{
NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
return dic;
} #pragma mark - GET
+ (void)GET:(NSString *)url params:(NSDictionary *)params success:(XJYResponseSuccess)success fail:(XJYResponseFail)fail
{
AFHTTPSessionManager *manager = [XJYSessionManager shareInstance];
[manager GET:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
id dic = [XJYSessionManager responseConfiguration:responseObject];
success(task, dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
fail(task, error);
}];
} #pragma mark - POST
+ (void)POST:(NSString *)url params:(NSDictionary *)params success:(XJYResponseSuccess)success fail:(XJYResponseFail)fail
{
AFHTTPSessionManager *manager = [XJYSessionManager shareInstance];
[manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
id dic = [XJYSessionManager responseConfiguration:responseObject];
success(task, dic);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
fail(task, error);
}];
} #pragma mark - 上传
+ (void)uploadWithURL:(NSString *)url params:(NSDictionary *)params fileData:(NSData *)filedata name:(NSString *)name fileName:(NSString *)fileName mimeType:(NSString *)mimeType progress:(XJYProgress)progress success:(XJYResponseSuccess)success fail:(XJYResponseFail)fail
{
AFHTTPSessionManager *manager = [XJYSessionManager shareInstance];
[manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFileData:filedata name:name fileName:fileName mimeType:mimeType];
} progress:^(NSProgress * _Nonnull uploadProgress) { progress(uploadProgress); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { id dic = [XJYSessionManager responseConfiguration:responseObject];
success(task, dic); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
fail(task, error);
}];
} #pragma mark - 下载
+ (NSURLSessionDownloadTask *)downloadWithURL:(NSString *)url savePathURL:(NSURL *)fileURL progress:(XJYProgress)progress success:(void (^)(NSURLResponse *, NSURL *))success fail:(void (^)(NSError *))fail
{
AFHTTPSessionManager *manager = [XJYSessionManager shareInstance]; NSURL *urlPath = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:urlPath];
NSURLSessionDownloadTask *downLoadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { progress(downloadProgress); } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
//下载后保存的路径
return [fileURL URLByAppendingPathComponent:[response suggestedFilename]]; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { if (error) {
fail(error);
} else {
success(response, filePath);
} }]; [downLoadTask resume];
return downLoadTask; }
@end

AFN3.0封装的更多相关文章

  1. 第六十二篇、AFN3.0封装网络请求框架,支持缓存

    1.网络请求 第一种实现方式: 功能:GET POST 请求 缓存逻辑: 1.是否要刷新本地缓存,不需要就直接发起无缓存的网络请求,否则直接读取本地数据 2.需要刷新本地缓存,先读取本地数据,有就返回 ...

  2. 基于NET 6.0 封装的 Fast.Framework

    Fast Framework 项目地址 https://gitee.com/China-Mr-zhong/Fast.Framework Author Mr-zhong Wechat 850856667 ...

  3. 基于AFNetWorking 3.0封装网络请求数据的类

    对于使用 AFNetworking 的朋友来说,很多朋友都是直接调用 AFNetworking的 API ,这样不太好,无法做到全工程统一配置. 最好的方式就是对网络层再封装一层,全工程不允许直接使用 ...

  4. LXNetwork – 基于AF3.0封装的iOS网络请求库

    本框架实现思路与YTKNetwork和RTNetworking类似,相当于一个简单版,把每一个网络请求封装成对象.使用LXNetwork,你的每一个请求都需要继承LXBaseRequest类,通过覆盖 ...

  5. Swift 2.0 封装图片折叠效果

    文/猫爪(简书作者)原文链接:http://www.jianshu.com/p/688c491580e3著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 用Swift封装图片折叠效果 b ...

  6. 【转】Vue 2.0封装axios笔记

    前言 单页面应用大多采用前后端分离开发思路,我们知道,前端和后端交互有多中方式(服务器端渲染.Ajax.websocket等),今天我们主要讲解Ajax部分. 最近团队讨论了一下,Ajax 本身跟 V ...

  7. Struts2.0 封装请求数据和拦截器介绍

    1. Struts2 框架中使用 Servlet 的 API 来操作数据 1.1 完全解耦合的方式 Struts2 框架中提供了一个 ActionContext 类,该类中提供了一些方法: stati ...

  8. iOS-网络请求-AFN升级至AFN3.0

    AFNetworking是一款在OS X和iOS下都令人喜爱的网络库.为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持. ...

  9. 分享一个基于EF5.0封装的BaseDAL

    public class BaseDAL<T> where T : class,new() { protected DbContext dbContext = DbContextFacto ...

随机推荐

  1. SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率

    应网友的要求,抽了点时间写了这个Demo,希望对2.2版想升级到3.0的朋友或正在使用3.0的朋友有所帮助.大家在使用Demo过程中如果发现什么问题或有什么建议,可以直接将Bug提交给我或告诉我,我会 ...

  2. 4、解析配置文件 redis.conf、Redis持久化RDB、Redis的主从复制

    1.Units单位 配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit 对大小写不敏感 2.INCLUDES包含 和我们的Struts2配置文件类似,可以通过includes包 ...

  3. 什么是Node?Node环境配置

     什么是Node? Node.js 不是JS文件也不是一个JS框架,而是一个Server side JavaScript runtime(服务端的一个JS运行时),我们可以Node环境中运行JS代码 ...

  4. 相克军_Oracle体系_随堂笔记010-SCN

    1.SCN的意义?system change number     时间    先后.新旧 select dbms_flashback.get_system_change_number, SCN_TO ...

  5. 探秘Tomcat——一个简易的Servlet容器

    即便再简陋的服务器也是服务器,今天就来循着书本的第二章来看看如何实现一个servlet容器. 背景知识 既然说到servlet容器这个名词,我们首先要了解它到底是什么. servlet 相比你或多或少 ...

  6. 常用HiveQL总结

    最近在用Hive做多维数据分析,总结一些常用HiveQL命令. 1. 建表 以纯文本数据建表: create table default.calendar_table ( day_cal date , ...

  7. 【UWP开发】一个简单的Toast实现

    Toast简介 在安卓里Toast是内置原生支持,它是Android中用来显示显示信息的一种机制.它主要用于向用户显示提示消息,没有焦点,显示的时间有限,过一定的时间就会自动消失.在UWP中虽然没有原 ...

  8. UML类图简单介绍

    先上一张图: 概述 类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 类图组 ...

  9. Z.ExtensionMethods 一个强大的开源扩展库

    今天有意的在博客园里面搜索了一下 Z.ExtensionMethods 这个扩展类库,确发现只搜到跟这个真正相关的才两篇博文而已,我都点进去看了一下,也都只是提到而已,没有专门介绍,才引起我写这篇文档 ...

  10. C#写爬虫,版本V2.0

    这个版本主要是以百度图片为对象,对其进行爬虫操作,实现了最基本的下载功能,但是缺陷非常多,日后还会对其进行改进. 打开百度图片,同时打开开发者工具,我们会发现,百度图片是通过如下的一段ajax来加载图 ...