果然實踐才是檢驗真理的硬道理怕篷,網(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)
}
}
*/
}
使用方法