1. 程式人生 > >Swift3.0 Alamofire網路請求的封裝(get,post,upload圖片上傳)

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

圖片上傳詳解見上一篇文章

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) } } ) } }