Swift3.0 Alamofire網絡請求的封裝(get,post,upload圖片上傳)轉


轉自: http://blog.csdn.net/C_calary/article/details/53193747

學習Swift 試着動手寫個天氣小app,搜集資料這個封裝還蠻好用的.

我用的第三方的版本是這樣的:

pod 'Alamofire', '~> 4.2.0'

pod 'SwiftyJSON', '~> 3.1.3'

import Foundation
import UIKit
import Alamofire
import SwiftyJSON

private let NetworkRequestShareInstance = NetworkRequest()

class NetworkRequest {
    class var sharedInstance : NetworkRequest {
        return NetworkRequestShareInstance
    }
}
extension NetworkRequest {
    //MARK: - GET 請求
    //    let tools : NetworkRequest.shareInstance!

    func getRequest(urlString: String, params : [String : Any], success : @escaping (_ response : [String : AnyObject])->(), failture : @escaping (_ error : Error)->()) {

        //使用Alamofire進行網絡請求時,調用該方法的參數都是通過getRequest(urlString, params, success :, failture :)傳入的,而success傳入的其實是一個接受           [String : AnyObject]類型 返回void類型的函數

        Alamofire.request(urlString, method: .get, parameters: params)
            .responseJSON { (response) in/*這里使用了閉包*/
                //當請求后response是我們自定義的,這個變量用於接受服務器響應的信息
                //使用switch判斷請求是否成功,也就是response的result
                switch response.result {
                case .success(let value):
                    //當響應成功是,使用臨時變量value接受服務器返回的信息並判斷是否為[String: AnyObject]類型 如果是那么將其傳給其定義方法中的success
//                    if let value = response.result.value as? [String: AnyObject] {
                        success(value as! [String : AnyObject])
//                    }
                    let json = JSON(value)
                    PrintLog(json)

                case .failure(let error):
                    failture(error)
                    print("error:\(error)")
                }
        }

    }
    //MARK: - POST 請求
    func postRequest(urlString : String, params : [String : Any], success : @escaping (_ response : [String : AnyObject])->(), failture : @escaping (_ error : Error)->()) {

        Alamofire.request(urlString, method: HTTPMethod.post, parameters: params).responseJSON { (response) in
            switch response.result{
            case .success:
                if let value = response.result.value as? [String: AnyObject] {
                    success(value)
                    let json = JSON(value)
                    PrintLog(json)
                }
            case .failure(let error):
                failture(error)
                PrintLog("error:\(error)")
            }

            }
        }

    //MARK: - 照片上傳
    ///
    /// - Parameters:
    ///   - urlString: 服務器地址
    ///   - params: ["flag":"","userId":""] - flag,userId 為必傳參數
    ///        flag - 666 信息上傳多張  -999 服務單上傳  -000 頭像上傳
    ///   - data: image轉換成Data
    ///   - name: fileName
    ///   - success:
    ///   - failture:
    func upLoadImageRequest(urlString : String, params:[String:String], data: [Data], name: [String],success : @escaping (_ response : [String : AnyObject])->(), failture : @escaping (_ error : Error)->()){

        let headers = ["content-type":"multipart/form-data"]

        Alamofire.upload(
            multipartFormData: { multipartFormData in
                //666多張圖片上傳
                let flag = params["flag"]
                let userId = params["userId"]

                multipartFormData.append((flag?.data(using: String.Encoding.utf8)!)!, withName: "flag")
                multipartFormData.append( (userId?.data(using: String.Encoding.utf8)!)!, withName: "userId")

                for i in 0..<data.count {
                    multipartFormData.append(data[i], withName: "appPhoto", fileName: name[i], mimeType: "image/png")
                }
        },
            to: urlString,
            headers: headers,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.responseJSON { response in
                        if let value = response.result.value as? [String: AnyObject]{
                            success(value)
                            let json = JSON(value)
                            PrintLog(json)
                        }
                    }
                case .failure(let encodingError):
                    PrintLog(encodingError)
                    failture(encodingError)
                }
        }
        )
    }
}

 

調用的方法也很簡單的,閉包傳值:

以下的接口是可以正常用的

 NetWorkWeather.sharedInstance.getRequest(urlString: "http://op.juhe.cn/onebox/weather/query", params: ["cityname":"杭州","key":"f6418f1f819c801a60ea7880ca844587"], success: {(json) -> Void in
        
            print(json)
            
        }, failture: {(error) -> Void in
            print(error)
        })

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM