博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift4.0 对 afn 进行二次封装
阅读量:5739 次
发布时间:2019-06-18

本文共 1554 字,大约阅读时间需要 5 分钟。

先将  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)  //(这里打印出来是 可选类型,请自行解包)

        }

 

封装的文件请来这里

 

转载地址:http://twfzx.baihongyu.com/

你可能感兴趣的文章
Android开发历程_15(AppWidget的使用)
查看>>
阿花宝宝 Java 笔记 之 初识java
查看>>
7、设计模式-创建型模式-建造者模式
查看>>
Cesium官方教程11--建模人员必读
查看>>
我国古代的勾股定理
查看>>
Linux下的C编程实战
查看>>
[32期] html中部分代码与英语单词关系
查看>>
PHP安装环境,服务器不支持curl_exec的解决办法
查看>>
Count and Say
查看>>
9.1(java学习笔记)正则表达式
查看>>
fopen打开文件失败的问题
查看>>
jQuery|元素遍历
查看>>
sql语句大全
查看>>
RedHat 6 安装配置Apache 2.2
查看>>
Openstack 安装部署指南翻译系列 之 Manila服务安装(Share Storage)
查看>>
underscore.js学习笔记
查看>>
Centos7安装
查看>>
windows下常用命令
查看>>
1.5编程基础之循环控制_29:数字反转
查看>>
iptables的CLUSTER target与以太网交换机的思想
查看>>