先将  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 进行二次封装的更多相关文章

  1. iOS菜鸟之AFN的二次封装

    我用一个单例类将一些常用的网络请求进行了二次封装,主要包括post请求 get请求  图片文件上传下载  视频的断点续传等功能. 首先大家先去github上下载AFN,将文件夹内的AFNetworki ...

  2. 对AFN的二次封装

     .h .m

  3. AFN的二次封装

    http://www.cnblogs.com/sxwangjiadong/p/4970751.html

  4. iOS项目相关@AFN&SDWeb的二次封装

    一,AFNetworking跟SDWebImge是功能强大且常用的第三方,然而在实际应用中需要封装用来复用今天就跟大家分享一下AFN&SDWeb的二次封装 1. HttpClient.h及.m ...

  5. AFNetworking3.0+MBProgressHUD二次封装,一句话搞定网络提示

    对AFNetworking3.0+MBProgressHUD的二次封装,使用更方便,适用性非常强: 一句话搞定网络提示: 再也不用担心网络库更新后,工程要修改很多地方了!网络库更新了只需要更新这个封装 ...

  6. .Net Framework下对Dapper二次封装迁移到.Net Core2.0遇到的问题以及对Dapper的封装介绍

    今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...

  7. OkGo3.0 --真实项目使用和二次封装(转)

    转载:https://blog.csdn.net/jiushiwo12340/article/details/79011480  11.OkGo3.0真实项目使用和二次封装: ====  11.OkG ...

  8. 【iOS】Swift4.0 GCD的使用笔记

    https://www.jianshu.com/p/47e45367e524 前言 在Swift4.0版本中GCD的常用方法还是有比较大的改动,这里做个简单的整理汇总. GCD的队列 队列是一种遵循先 ...

  9. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

随机推荐

  1. visual studio 2015百度云下载

    visual studio 2015百度云下载 https://pan.baidu.com/s/1b198Zo3mX5_zA2VX3xRRfw 提取码: 关注公众号[GitHubCN]回复2015获取

  2. HTML5游戏 看你有多“色” 开发

    所有文章搬运自我的个人主页:sheilasun.me 在极客学院看到了这个游戏,在网上找到这个游戏玩了好久真的比较上瘾,于是自己也试着做了一下,可以戳这里试玩→看你有多色 游戏规则: 找出颜色不同的方 ...

  3. 【Java】 剑指offer(65) 不用加减乘除做加法

      本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×. ...

  4. 洛谷P1926 小书童—刷题大军【01背包】

    题目链接:https://www.luogu.org/problemnew/show/P1926 题目背景 数学是火,点亮物理的灯:物理是灯,照亮化学的路:化学是路,通向生物的坑:生物是坑,埋葬学理的 ...

  5. serialVersionUID 序列化

    http://www.mkyong.com/java-best-practices/understand-the-serialversionuid/ 简单来说,Java的序列化机制是通过在运行时判断类 ...

  6. WinForm中DataGridView导出为Excel(快速版)

    public static void ExportExcel(DataGridView myDGV, string fileName) { string saveFileName = fileName ...

  7. 4889: [Tjoi2017]不勤劳的图书管理员 树套树

    国际惯例的题面(Bzoj没有,洛谷找的):动态加权逆序对,一眼树套树.256MB内存,5e4范围,不虚不虚.首先把交换改成两个插入和两个删除.考虑插入和删除的贡献,就是统计前面比这个值大的数的数值和, ...

  8. STL之heap与优先级队列Priority Queue详解

    一.heap heap并不属于STL容器组件,它分为 max heap 和min heap,在缺省情况下,max-heap是优先队列(priority queue)的底层实现机制.而这个实现机制中的m ...

  9. js获取判断苹果手机机型

    原先获取不了苹果系列的型号,但转换思路,先判断是否是苹果,再用分辨率获取型号 //获取手机型号函数beginfunction getPhoneType(){ //正则,忽略大小写var pattern ...

  10. 喵哈哈村的魔法考试 Round #17 题解

    喵哈哈村的秘境探险系列. A. 实际上就是求乘积%k是否等于0,显然 a * b % k = (a%k)*(b%k)%k,所以边乘边取模就好了. #include<bits/stdc++.h&g ...