Swift3.0封裝 AFNetworking網(wǎng)絡(luò)請求類之坑

果然實踐才是檢驗真理的硬道理,網(wǎng)上各種查不如自己寫一遍
以下是請求和上傳文件的方法,以后再更其他的


import UIKit
import AFNetworking

/// Swift 的枚舉支持任意數(shù)據(jù)類型
/// switch / enum 在 OC 中都只是支持整數(shù)
/**
 - 如果日常開發(fā)中,發(fā)現(xiàn)網(wǎng)絡(luò)請求返回的狀態(tài)碼是 405,不支持的網(wǎng)絡(luò)請求方法
 - 首先應(yīng)該查找網(wǎng)路請求方法是否正確
 */
enum HWHTTPMethod {
    case GET
    case POST
}

/// 網(wǎng)絡(luò)管理工具
class HWNetworkManager: AFHTTPSessionManager {

    /// 靜態(tài)區(qū)/常量/閉包
    /// 在第一次訪問時,執(zhí)行閉包,并且將結(jié)果保存在 shared 常量中
    static let shared:HWNetworkManager = {
        // 實例化對象
        let instance = HWNetworkManager()
        
        // 設(shè)置響應(yīng)反序列化支持的數(shù)據(jù)類型
        instance.responseSerializer.acceptableContentTypes?.insert("text/plain")
        
        // 返回對象
        return instance
        
    }()
    
    // 將成功和失敗的回調(diào)寫在一個逃逸閉包中(請求)
    /// 封裝 AFN 的 GET / POST 請求
    ///
    /// - parameter method:     GET / POST
    /// - parameter URLString:  URLString
    /// - parameter parameters: 參數(shù)字典
    /// - parameter completion: 完成回調(diào)[json(字典/數(shù)組), 是否成功]

    func request(requestType :HWHTTPMethod, url : String, parameters : [String : Any], resultBlock : @escaping([String : Any]?, Error?) -> ()) {
        
        // 成功閉包
        let successBlock = { (task: URLSessionDataTask, responseObj: Any?) in
            resultBlock(responseObj as? [String : Any], nil)
        }
        
        // 失敗的閉包
        let failureBlock = { (task: URLSessionDataTask?, error: Error) in
            resultBlock(nil, error)
        }
        
        // Get 請求
        if requestType == .GET {
            get(url, parameters: parameters, progress: nil, success: successBlock, failure: failureBlock)
        }
        
        // Post 請求
        if requestType == .POST {
            post(url, parameters: parameters, progress: nil, success: successBlock, failure: failureBlock)
        }
    }
    // MARK: - 封裝 AFN 方法
    /// 上傳文件必須是 POST 方法,GET 只能獲取數(shù)據(jù)
    /// 封裝 AFN 的上傳文件方法
    ///
    /// - parameter URLString:  URLString
    /// - parameter parameters: 參數(shù)字典
    /// - parameter name:       接收上傳數(shù)據(jù)的服務(wù)器字段(name - 要咨詢公司的后臺) `pic`
    /// - parameter data:       要上傳的二進制數(shù)據(jù)
    /// - parameter completion: 完成回調(diào)
    func unload(urlString: String, parameters: AnyObject?, constructingBodyWithBlock:((_ formData:AFMultipartFormData) -> Void)?, uploadProgress: ((_ progress:Progress) -> Void)?, success: ((_ responseObject:AnyObject?) -> Void)?, failure: ((_ error: NSError) -> Void)?) -> Void {
        
        
        HWNetworkManager.shared.post(urlString, parameters: parameters, constructingBodyWith: { (formData) in
            
            
            }, progress: { (progress) in
                uploadProgress!(progress)
            }, success: { (task, objc) in
                if objc != nil {
                    
                    success!(objc as AnyObject?)
                    
                }
            }, failure: { (task, error) in
                failure!(error as NSError)
                
        })
        
    }

    
    
    //

   /*
    // 將成功和失敗的回調(diào)分別寫在兩個逃逸閉包中
    func request(requestType : HWHTTPMethod, url : String, parameters : [String : Any], succeed : @escaping([String : Any]?) -> (), failure : @escaping(Error?) -> ()) {
        
        // 成功閉包
        let successBlock = { (task: URLSessionDataTask, responseObj: Any?) in
            succeed(responseObj as? [String : Any])
        }
        
        // 失敗的閉包
        let failureBlock = { (task: URLSessionDataTask?, error: Error) in
            failure(error)
        }
        
        // Get 請求
        if requestType == .Get {
            get(url, parameters: parameters, progress: nil, success: successBlock, failure: failureBlock)
        }
        
        // Post 請求
        if requestType == .Post {
            post(url, parameters: parameters, progress: nil, success: successBlock, failure: failureBlock)
        }
    }

    */
    
}

使用方法




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,040評論 25 709
  • 你是我心底遺忘的城。 倒計時的記憶。
    淡言屋閱讀 300評論 2 0
  • 上正面管教時,做了個小測試,發(fā)現(xiàn)自己是討好型人格,代表動物是變色龍。一開始我特別不能接受,但是事后細想,我就是討好...
    蜂蜜87閱讀 195評論 0 0
  • 自行車,作為大多是人記憶中的事物,仍然活躍在我們的身邊,曾經(jīng)作為人們出行的主要交通工具,雖然經(jīng)歷著公交車,汽車,電...
    說書客閱讀 360評論 0 1
  • 泉溪臥石盡青苔,深淺攀爬幾個栽。 惹得山花含淚笑,天池著眼景舒開。 林俊韓2017.03.18
    清風閣閱讀 490評論 1 3

友情鏈接更多精彩內(nèi)容