swift AFNetworking封装

本文介绍了如何在Swift中封装AFNetworking网络库,通过创建继承自AFHTTPSessionManager的类实现GET/POST请求,并提供了简单示例。

习惯了在oc中使用AFNetworking第三方网络框架,在swift中也想尝试封装一下。封装之前,先建一个类继承自AFHTTPSessionManager,需要在新建的类中导入AFNetworking框架,是一个动态的framework。
下面是封装的AFNetworking代码

import AFNetworking
// 定义枚举类型
enum HTTPRequestType : Int{
    case GET = 0
    case POST
}

class NetworkTools: AFHTTPSessionManager {
    // 设计单例 let是线程安全的
    static let shareInstance : NetworkTools = {
        let tools = NetworkTools()
        tools.responseSerializer.acceptableContentTypes?.insert("text/html")
        return tools
    }()

}

// 封装请求方法
extension NetworkTools {
    func request(methodType : HTTPRequestType, urlString : String, parameters : [String : AnyObject], finished :@escaping (_ result : AnyObject?, _ error : Error?)-> ())  {
        // 1 成功回调
        let successCallBack = {(task :URLSessionDataTask, result : Any) in
        finished(result as AnyObject?, nil)
        }
        // 2 失败回调
        let failureCallBack = {(task : URLSessionDataTask?, error :Error) in
            finished(nil, error)
        }

        if methodType == .GET {
            // get请求

        get(urlString, parameters: parameters, progress: nil, success: successCallBack, failure: failureCallBack)
        }else {
            // post请求

            post(urlString, parameters: parameters, progress: nil, success: successCallBack, failure: failureCallBack)

      }
    }
}

/*

 // get 请求
 //        get(urlString, parameters: parameters, progress: nil, success: { (task :URLSessionDataTask, result : Any) in
 //            finished(result as AnyObject?, nil)
 //            print("请求成功")
 //        }) { (task : URLSessionDataTask?, error :Error) in
 //            print("请求失败")
 //            finished(nil, error)
 //        }

 // post请求
 //            post(urlString, parameters: parameters, progress: nil, success: { ( task : URLSessionDataTask, result : Any) in
 //                finished(result as AnyObject?, nil)
 //            }) { (task : URLSessionDataTask?,error : Error) in
 //                finished(nil, error)
 //            }
 //        }
 */

这里只封装的GET / POST 请求,没有封装上传下载功能。
下面是简单的调用

func getDetailChannel() {

        let urlString = "http://www.douyutv.com/api/v1/channel?aid=ios&auth=6a4c6b01d851ceece76aee1980b9e5bb&client_sys=ios&limit=4&time="
//        let str = "http://httpbin.org/get"

        NetworkTools.shareInstance.request(methodType: .GET, urlString: urlString, parameters: ["name":"zhangsan" as AnyObject]) { (result : AnyObject?, error : Error?) in

           if error != nil  {
            print(error!)
                return
            }
            print(result!)
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值