swift4.0 对 afn 进行二次封装
先将 afn 用pod导入到 工程中
创建一个类 ZHttpTools 继承自
AFHTTPSessionManager
一般我们不希望网络请求同时有多个存在,所以我们将这个工具类 设计成单例
代码如下(这个单例是严格仿照 ios的代码写的,你如果说这是个不严谨的单例,要调用allocWithZone 和 copyWithZone才严谨,那么请自行实现,在此不做具体讨论,如果你有空实现了,可以贴到下面的评论里,供大家一起使用。在此只给出标准的写法。)
static let shareInstance: ZHttpTools = {
let tools = ZHttpTools()
添加text/html和text/plain",使afn支持json解析
tools.responseSerializer.acceptableContentTypes?.insert("text/html")
tools.responseSerializer.acceptableContentTypes?.insert("text/plain")
return tools
}()
下面就是对网络请求的封装了
在此只对 get 和 post进行封装
我们用枚举来定义不同的请求类型
enum RequestType:String {
case GET = "GET"
case POST = "POST"
}
对函数进行封装,代码如下
func request(methodTypea methodType : RequestType, urlString: String, parametersa: Any? , progress downloadProgress: ((Progress) -> Void)?, finished : ((_ result : Any?, _ error : Error?) ->Void)?) {
let successa = { (task : URLSessionDataTask, resulta : Any) in
finished!(resulta,nil)
}
let failurea = { (task : URLSessionDataTask?, errora : Error) in
finished!(nil, errora)
}
//这里提取出这个progressa 来进一步让大家了解如何抽取闭包(oc 中的 block)
let progressa = { (progress:Progress) in
}
if methodType == .GET {
get(urlString, parameters: parametersa, progress: progressa, success: successa, failure: failurea)
}else {
post(urlString, parameters: parametersa, progress: progressa, success: successa, failure:failurea)
}
}
在控制器调用这个方法
ZHttpTools.shareInstance.request(methodTypea: .GET, urlString: "http://httpbin.org/get", parametersa: [:], progress: { (progress : Progress) in
}) { (result, error) in
print(result as Any) //(这里打印出来是 可选类型,请自行解包)
}
封装的文件请来这里
https://github.com/qigemingnan/ZHttptToolFromAFNWithSwiftFour
swift4.0 对 afn 进行二次封装的更多相关文章
- iOS菜鸟之AFN的二次封装
我用一个单例类将一些常用的网络请求进行了二次封装,主要包括post请求 get请求 图片文件上传下载 视频的断点续传等功能. 首先大家先去github上下载AFN,将文件夹内的AFNetworki ...
- 对AFN的二次封装
.h .m
- AFN的二次封装
http://www.cnblogs.com/sxwangjiadong/p/4970751.html
- iOS项目相关@AFN&SDWeb的二次封装
一,AFNetworking跟SDWebImge是功能强大且常用的第三方,然而在实际应用中需要封装用来复用今天就跟大家分享一下AFN&SDWeb的二次封装 1. HttpClient.h及.m ...
- AFNetworking3.0+MBProgressHUD二次封装,一句话搞定网络提示
对AFNetworking3.0+MBProgressHUD的二次封装,使用更方便,适用性非常强: 一句话搞定网络提示: 再也不用担心网络库更新后,工程要修改很多地方了!网络库更新了只需要更新这个封装 ...
- .Net Framework下对Dapper二次封装迁移到.Net Core2.0遇到的问题以及对Dapper的封装介绍
今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...
- OkGo3.0 --真实项目使用和二次封装(转)
转载:https://blog.csdn.net/jiushiwo12340/article/details/79011480 11.OkGo3.0真实项目使用和二次封装: ==== 11.OkG ...
- 【iOS】Swift4.0 GCD的使用笔记
https://www.jianshu.com/p/47e45367e524 前言 在Swift4.0版本中GCD的常用方法还是有比较大的改动,这里做个简单的整理汇总. GCD的队列 队列是一种遵循先 ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
随机推荐
- Journal of BitcoinJ 从clone开始
启动Powershell cd D:\workspace mkdir BitcoinJ git init
- win10下Spark的环境搭建
win10下Spark的环境搭建 2018-08-19 18:36:45 一.jdk 1.8.0 安装与配置 二.scala 2.11.8 安装与配置http://www.scala-lang.or ...
- Vijos1910 NOIP2014提高组 Day2T3 解方程 其他
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - Vijos1910 题意概括 已知多项式方程: a0+a1x+a2x2+...+anxn=0 求这个方程在[1 ...
- 练习|Django-单表
结构目录 页面展示: 1创建Django,创建app01 在modules.py添加 class Book(models.Model): id=models.AutoField(primary_key ...
- Redis持久化(persistence)
Redis 持久化 Redis 提供了多种不同级别的持久化方式: RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF 持久化记录服务器 ...
- 洛谷 p1123 取数游戏【dfs】
题目链接:https://www.luogu.org/problemnew/show/P1123 转载于:>>>>>> 题目描述 一个N×M的由非负整数构成的数字矩 ...
- CPU个数、CPU核心数、CPU线程数
CPU个数.CPU核心数.CPU线程数 我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之 ...
- Linux查看日志定位问题
1.定位错误关键字所在行数 cat -n test.log |grep "查找的错误关键字" 2.得到错误关键字所在行号(假设为第500行),查询错误关键字前后100行数据 cat ...
- HDU.2516.取石子游戏(博弈论 Fibonacci Nim)
题目链接 \(Description\) 1堆石子有n个.两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍,取完者胜.问谁能赢. \(Solution ...
- 公开课 之 tony 电子时钟 (课堂笔记)
# tony 之电子时钟from PyQt5.QtWidgets import QApplication, QWidget, QLCDNumber, QDesktopWidget, QVBoxLayo ...