天天看點

IOS 開發 AFNetworking 網絡工具-網絡請求的三次封裝 Swift版

标題

//
//  NetworkTool.swift
//
//  Created by zhouyu on 16/1/25.
//  Copyright © 2016年 mac All rights reserved.
//

import UIKit
import AFNetworking

enum HMHTTPClientType: String {

    case GET = "GET"
    case POST = "POST"

}

class HMHTTPClient: AFHTTPSessionManager {

    // MARK: 單例
    static let shareInstance: HMHTTPClient = {
        let afn = HMHTTPClient()
        // 網絡請求的 content-type: text/plain
        afn.responseSerializer.acceptableContentTypes?.insert("text/plain","application/json","text/json","text/javascript","text/html")
        return afn
    }()

    //MARK: 一次封裝的網絡工具類
    func  request(type: HMHTTPClientType,URLString: String, parameters: AnyObject?, progress downloadProgress: ((NSProgress) -> Void)?, success: ((NSURLSessionDataTask, AnyObject?) -> Void)?, failure: ((NSURLSessionDataTask?, NSError) -> Void)?){
        if type == .GET {
            self.GET(URLString, parameters: parameters, progress: downloadProgress, success: success, failure: failure)
        } else  if type == .POST {
            self.POST(URLString, parameters: parameters, progress: downloadProgress, success: success, failure: failure)
        }
    }

    //MARK: 二次封裝的網絡工具類
    func request(type: HMHTTPClientType,URLString: String, parameters: AnyObject?,success: (jsonDict: [String: AnyObject])->(),failure: (error: NSError)->()){

        // <#T##((NSURLSessionDataTask, AnyObject?) -> Void)?##((NSURLSessionDataTask, AnyObject?) -> Void)?##(NSURLSessionDataTask, AnyObject?) -> Void#>
        let orginalSuccess =  { (task:NSURLSessionDataTask, JSON:AnyObject?) -> Void in
            // 網絡請求傳回之後,對資料進行處理
            if let json = JSON as? [String: AnyObject] {
                success(jsonDict: json)
            }
        }

        // <#T##((NSURLSessionDataTask?, NSError) -> Void)?##((NSURLSessionDataTask?, NSError) -> Void)?##(NSURLSessionDataTask?, NSError) -> Void#>
        let orginalFailure = { (task:NSURLSessionDataTask?, error:NSError) -> Void in
            failure(error: error)
        }
        request(type, URLString: URLString, parameters: parameters, progress: nil, success: orginalSuccess, failure: orginalFailure)
    }

    //MARK: 三次封裝的網絡工具類
    class func request(type: HMHTTPClientType,URLString: String, parameters: AnyObject?,success: (jsonDict: [String: AnyObject])->(),failure: (error: NSError)->()){
        HMHTTPClient.shareInstance.request(type, URLString: URLString, parameters: parameters, success: success, failure: failure)
    }
}