如果你使用 Alamofire 那么。使用这个常用方法
//MARK:- Public Method
/**
* Initiates HTTPS or HTTP request over |kHTTPMethod| method and
returns call back in success and failure block.
*
* @param serviceName name of the service
* @param method method type like Get and Post
* @param postData parameters
* @param responeBlock call back in block
*/
func requestApi(serviceName: String, method: kHTTPMethod, postData: Dictionary<String, Any>, withProgressHUD showProgress: Bool, completionClosure:@escaping (_ result: Any?, _ error: Error?, _ errorType: ErrorType, _ statusCode: NSNumber?) -> ()) -> Void
{
if NetworkReachabilityManager()?.isReachable == true
{
if showProgress
{
showProgressHUD()
}
let headers = getHeaderWithAPIName(serviceName: serviceName)
let serviceUrl = getServiceUrl(string: serviceName)
let params = getPrintableParamsFromJson(postData: postData)
print_debug(items: "Connecting to Host with URL \(kBASEURL)\(serviceName) with parameters: \(params)")
print_debug(items: "###### \(postData) ######")
//NSAssert Statements
assert(method != .GET || method != .POST, "kHTTPMethod should be one of kHTTPMethodGET|kHTTPMethodPOST|kHTTPMethodPOSTMultiPart.");
switch method
{
case .GET:
Alamofire.request(serviceUrl, method: .get, parameters: postData, encoding: URLEncoding.default, headers: headers).responseJSON(completionHandler:
{ (DataResponse) in
SVProgressHUD.dismiss()
switch DataResponse.result
{
case .success(let JSON):
print_debug_fake(items: "Success with JSON: \(JSON)")
print_debug(items: "Success with status Code: \(String(describing: DataResponse.response?.statusCode))")
let response = self.getResponseDataDictionaryFromData(data: DataResponse.data!)
completionClosure(response.responseData, response.error, .requestSuccess, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
case .failure(let error):
print_debug(items: "json error: \(error.localizedDescription)")
if error.localizedDescription == "cancelled"
{
completionClosure(nil, error, .requestCancelled, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
}
else
{
completionClosure(nil, error, .requestFailed, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
}
}
})
case .POST:
Alamofire.request(serviceUrl, method: .post, parameters: postData, encoding: JSONEncoding.default, headers: headers).responseJSON(completionHandler:
{ (DataResponse) in
SVProgressHUD.dismiss()
switch DataResponse.result
{
case .success(let JSON):
print_debug_fake(items: "Success with JSON: \(JSON)")
print_debug(items: "Success with status Code: \(String(describing: DataResponse.response?.statusCode))")
let response = self.getResponseDataDictionaryFromData(data: DataResponse.data!)
completionClosure(response.responseData, response.error, .requestSuccess, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
case .failure(let error):
print_debug(items: "json error: \(error.localizedDescription)")
completionClosure(nil, error, .requestFailed, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
}
})
case .PUT:
Alamofire.request(serviceUrl, method: .put, parameters: postData, encoding: JSONEncoding.default, headers: headers).responseJSON(completionHandler:
{ (DataResponse) in
SVProgressHUD.dismiss()
switch DataResponse.result
{
case .success(let JSON):
print_debug_fake(items: "Success with JSON: \(JSON)")
print_debug(items: "Success with status Code: \(String(describing: DataResponse.response?.statusCode))")
let response = self.getResponseDataDictionaryFromData(data: DataResponse.data!)
completionClosure(response.responseData, response.error, .requestSuccess, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
case .failure(let error):
print_debug(items: "json error: \(error.localizedDescription)")
completionClosure(nil, error, .requestFailed, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
}
})
case .PATCH:
Alamofire.request(serviceUrl, method: .patch, parameters: postData, encoding: JSONEncoding.default, headers: headers).responseJSON(completionHandler:
{ (DataResponse) in
SVProgressHUD.dismiss()
switch DataResponse.result
{
case .success(let JSON):
print_debug_fake(items: "Success with JSON: \(JSON)")
print_debug(items: "Success with status Code: \(String(describing: DataResponse.response?.statusCode))")
let response = self.getResponseDataDictionaryFromData(data: DataResponse.data!)
completionClosure(response.responseData, response.error, .requestSuccess, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
case .failure(let error):
print_debug(items: "json error: \(error.localizedDescription)")
completionClosure(nil, error, .requestFailed, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
}
})
case .DELETE:
Alamofire.request(serviceUrl, method: .delete, parameters: postData, encoding: URLEncoding.default, headers: headers).responseJSON(completionHandler:
{ (DataResponse) in
SVProgressHUD.dismiss()
switch DataResponse.result
{
case .success(let JSON):
print_debug_fake(items: "Success with JSON: \(JSON)")
print_debug(items: "Success with status Code: \(String(describing: DataResponse.response?.statusCode))")
let response = self.getResponseDataDictionaryFromData(data: DataResponse.data!)
completionClosure(response.responseData, response.error, .requestSuccess, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
case .failure(let error):
print_debug(items: "json error: \(error.localizedDescription)")
completionClosure(nil, error, .requestFailed, NSNumber.getNSNumber(message: DataResponse.response?.statusCode))
}
})
}
}
else
{
SVProgressHUD.dismiss()
completionClosure(nil, nil, .noNetwork, nil)
}
}
请根据你的方法调整这个方法,因为我是直接在我的网络公共类中复制这个方法