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 ...
随机推荐
- 在django中,redirect如何传递message。
众所周知,在django中,默认的message,只能在同一个request中传递. 但如果在请求过程中,使用了redirect跳转,那么,这个一次性的message就会失败, 无法在前端给用户提示. ...
- [HAOI2016]放棋子
题解: 刚开始没有仔细看题目.. 后来发现障碍是每行每列有且只有一个 那么其实会发现这就是一道错排的题目 f[i]=(n-1)*(f[i-1]+f[i-2])
- Rookey.Frame v1.0快速开发平台-整体介绍
Rookey.Frame v1.0是一套基于.NET MVC的极速开发框架,支持简单逻辑模块零代码编程.支持二次开发,具有高扩展性.高复用性.高伸缩性. 框架特点 (1)简单逻辑模块实现零代码编程,通 ...
- Matrix Power Series POJ3233
递推思想 先放着 见 https://www.cnblogs.com/jackge/p/3147604.html
- C语言 —— sprintf()函数
sprintf() 函数 例如: #include<stdio.h> int main() { //注意s一定要先初始化! *sizeof(char)); //或char s[40]; s ...
- 微信小程序倒计时组件开发
今天给大家带来微信小程序倒计时组件具体开发步骤: 先来看下最终效果: git源:http://git.oschina.net/dotton/CountDown 分步骤-性子急的朋友,可以直接看最后那段 ...
- Android超链接
第一种: text += "<a href='http://www.baidu.com'>百度超链接</a>"; CharSequence charSequ ...
- P1593 因子和
P1593 因子和新算法:#define ni 逆元先质因数分解,(1+p1^1+p1^2...p1^x)*(1+p2^1+p2^2...p2^x)然后套等比数列公式就可以了. #include< ...
- android studio 查看预览所有屏幕分辨率下的显示
你可以打开在窗口的右侧预览面板设置上的布局.你可以通过修改面板顶部面板改变各种选项来修改预览,包括预览设备,主题,平台版本等等,可以同时预览多个设备上布局,可以从“设备”选项中下拉”预览所有屏幕的尺寸 ...
- [HDU4906]Our happy ending
[HDU4906]Our happy ending 题目大意: 让你构造一个\(n(n\le20)\)个数的数列,其中每个数都为小于等于\(l(l\le10^9)\)的非负整数. 问你能构造出多少个这 ...