Swift3.0 Alamofire網路請求的封裝(get,post,upload圖片上傳)
阿新 • • 發佈:2019-01-01
圖片上傳詳解見上一篇文章
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)
}
}
)
}
}