zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    面向对象编程
    re模块(正则表达式)
    numpy 模块
    hashlib,logging模块
    模块
    使用Python将Excel中的数据导入到MySQL
    [译]学习IPython进行交互式计算和数据可视化(七)
    [译]学习IPython进行交互式计算和数据可视化(六)
    [译]学习IPython进行交互式计算和数据可视化(五)
    [译]学习IPython进行交互式计算和数据可视化(四)
  • 原文地址:https://www.cnblogs.com/isItOk/p/8744246.html
Copyright © 2011-2022 走看看