Alamofire二次封装Swift版的AF

import UIKit

import Alamofire

import SwiftyJSON

/** 请求成功回调*/

typealias NetSuccessBlock = (NSDictionary,SwiftyJSON.JSON) -> Void

/** 请求失败回调*/

typealias NetFaliedBlock = (AFSErrorInfo) -> Void

class AFSNet: NSObject {

    private var sessionManager :Alamofire.SessionManager?

    private var baseUrl = "http://192.168.1.189:9600"

    //单例

    static let shareAFNet = AFSNet()

    //

    //重写初始化方法

    override init() {

        let configuration = URLSessionConfiguration.default

        configuration.timeoutIntervalForRequest = 20.0

        sessionManager = Alamofire.SessionManager(configuration: configuration)

    }

    /** GET请求*/

    func GET(_ urlStr:String, _ param:Parameters?,_ isShowHUD:Bool,success:@escaping NetSuccessBlock,falied:@escaping NetFaliedBlock) {

        let url = baseUrl + urlStr

        let encodStr = url.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)

        let  headers : HTTPHeaders = ["Content-Type":"application/json;charset=utf-8"] // http

        self.sessionManager?.request(encodStr!, method: .get, parameters: param, encoding: URLEncoding.default, headers: headers).responseJSON(completionHandler: { (response) in

        

            if  response.result.error != nil { // 没网络

                

                self.handleFaliedData(response.result.error! as NSError, falied: falied)

            }else  if let value = response.result.value { //  有网络

                if JSON(value)["error"].string != nil {// 请求失败

                    self.handleRequestFaliedData(JSON(value), falied: falied)

                }else{ //  请求成功

                    self.handleRequestSuccessData(value, success: success, falied: falied)

                }

            }

        })

    }

    /** POST请求*/

    func POST(_ urlStr:String, _ param:Parameters?,_ isShowHUD:Bool,success:@escaping NetSuccessBlock,falied:@escaping NetFaliedBlock) {

        

        let url = baseUrl + urlStr

        let encodStr = url.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)

        let  headers : HTTPHeaders = ["Content-Type":"application/json;charset=utf-8"] // http

        //let  headers : HTTPHeaders = ["Content-Type":"application/x-www-form-urlencoded"] //https

        self.sessionManager?.request(encodStr!, method: .post, parameters: param, encoding: JSONEncoding.default, headers: headers)

            //.validate() <注:用response.result.isSuccess 判断是否请求成功>

            .responseJSON(completionHandler: { (response) in

                

                if  response.result.error != nil { // 没网络

                    

                    self.handleFaliedData(response.result.error! as NSError, falied: falied)

                }else  if let value = response.result.value { //  有网络

                    if JSON(value)["error"].string != nil {// 请求失败

                        self.handleRequestFaliedData(JSON(value), falied: falied)

                    }else{ //  请求成功

                        self.handleRequestSuccessData(value, success: success, falied: falied)

                    }

                }

            })

    }

    /** 处理请求成功数据*/

    private func handleRequestSuccessData(_ data:Any,success:NetSuccessBlock,falied:NetFaliedBlock) {

        let DicJSON = data as! NSDictionary

        let SwiftJSON = JSON(data)

        if SwiftJSON["code"].int == 1{

            success(DicJSON,SwiftJSON)

        }else{

            var errorInfo = AFSErrorInfo()

            errorInfo.code = SwiftJSON["code"].int == nil ? 0:SwiftJSON["code"].int!

            errorInfo.message = SwiftJSON["msg"].string == nil ? "":SwiftJSON["msg"].string!

            falied(errorInfo)

        }

    }

    /** 处理请求失败数据*/

    func handleRequestFaliedData(_ resurt:JSON,falied:NetFaliedBlock) {

        var errorInfo = AFSErrorInfo()

        errorInfo.error = resurt["error"].string == nil ? "":resurt["error"].string!

        errorInfo.code = resurt["status"].int == nil ? 0:resurt["status"].int!

        errorInfo.message = "未知错误"

        if (errorInfo.code == 404 ){

            errorInfo.message = "访问接口存在"

        }else if (errorInfo.code == -1001) {

            errorInfo.message = "请求超时"

        }else if (errorInfo.code == -1004) {

            errorInfo.message = "服务器没有启动"

        }

        falied(errorInfo)

    }

    /** 处理失败数据*/

    func handleFaliedData(_ error:NSError,falied:NetFaliedBlock) {

        var errorInfo = AFSErrorInfo()

        errorInfo.code = error.code

        errorInfo.message = "未知错误"

        if (error.code == -1004){

            errorInfo.message = "服务器没有启动"

        }else if (error.code == -1009) {

            errorInfo.message = "无网络连接"

        }

        falied(errorInfo)

    }

    /**

     code = -1004 服务器没有启动

     code = 500+  服务器内部出错

     code = 404   接口不存在

     code = 200   请求成功

     code = -1001 请求超时

     code = -1009 网络断开

     code = -999 SSL证书问题

     */

}


/** 访问出错具体原因 */

struct AFSErrorInfo {

    var code = 0

    var message = ""

    var error = ""

}

/** 从JSON里取value*/

extension JSON{

    /**  取字符串*/

    func strValue(_ jsonKeys:[String])->String{

        var tempVlaue = self

        for index in 0..<jsonKeys.count {

            tempVlaue = tempVlaue[jsonKeys[index]]

        }

        return tempVlaue.string != nil ? tempVlaue.string! : ""

    }

    /**  取整数*/

    func intValue(_ jsonKeys:[String])->Int{

        var tempVlaue = self

        for index in 0..<jsonKeys.count {

            tempVlaue = tempVlaue[jsonKeys[index]]

        }

        return tempVlaue.int != nil ? tempVlaue.int! : -99

    }

    /**  取Double*/

    func douValue(_ jsonKeys:[String])->Double{

        var tempVlaue = self

        for index in 0..<jsonKeys.count {

            tempVlaue = tempVlaue[jsonKeys[index]]

        }

        return tempVlaue.double != nil ? tempVlaue.double! : -0.00

    }

}


猜你喜欢

转载自blog.csdn.net/qq_37191821/article/details/80835470