example ios swift alamofire swift3

ios - example - pod alamofire swift 4



¿Cómo usar Alamofire 4 SessionManager? (2)

Estaba usando Alamofire 3.4 en Swift 2.3 y necesito actualizar mi código a Swift 3 y Alamofire 4. Estaba usando el Administrador de Alamofire para hacer un POST en una URL. Leí la documentación sobre SessionManager y entiendo que la solicitud utiliza el método .GET.

Estaba usando Manager .Response () para obtener la devolución de llamada de la solicitud, ahora eso se ha modificado en SessionManager.

¿Cómo hago un método POST usando SessionManager? ¿Y cómo obtengo la respuesta de la solicitud?

Este es mi código original:

import UIKit import AEXML import Alamofire class Request: NSObject { internal typealias RequestCompletion = (statusCode: Int?, error:NSError?) -> () private var completionBlock: RequestCompletion! var serverTrustPolicy: ServerTrustPolicy! var serverTrustPolicies: [String: ServerTrustPolicy]! var afManager: Manager! func buildBdRequest(ip : String, serviceStr : String, completionBlock:RequestCompletion){ let url = getURL(ip, service: serviceStr) configureAlamoFireSSLPinningWithCertificateData() makeAlamofireRequest(url) self.completionBlock = completionBlock } func makeAlamofireRequest(url : String){ self.afManager.request(.POST, url) .validate(statusCode: 200..<300) .response { request, response, data, error in print("data - > /n /(data.debugDescription) /n") print("response - >/n /(response.debugDescription) /n") print("error - > /n /(error.debugDescription) /n") var statusCode = 0 if response != nil { statusCode = (response?.statusCode)! } self.completionBlock(statusCode: statusCode, error: error) } } private func getURL(ip : String, service: String) -> String{ return ip + service; } func configureAlamoFireSSLPinningWithCertificateData() { self.serverTrustPolicies = [ : // "github.com": self.serverTrustPolicy! ] self.afManager = Manager( configuration: NSURLSessionConfiguration.defaultSessionConfiguration() ) } }


He migrado su código a Swift 3 y Alamofire 4 y aquí está el resultado:

internal typealias RequestCompletion = (Int?, Error?) -> ()? private var completionBlock: RequestCompletion! var afManager : SessionManager! func makeAlamofireRequest(url :String){ let configuration = URLSessionConfiguration.default afManager = Alamofire.SessionManager(configuration: configuration) afManager.request(url, method: .post).validate().responseJSON { response in switch (response.result) { case .success: print("data - > /n /(response.data?.debugDescription) /n") print("response - >/n /(response.response?.debugDescription) /n") var statusCode = 0 if let unwrappedResponse = response.response { let statusCode = unwrappedResponse.statusCode } self.completionBlock(statusCode, nil) break case .failure(let error): print("error - > /n /(error.localizedDescription) /n") let statusCode = response.response?.statusCode self.completionBlock?(statusCode, error) break } } }

Algunas notas sobre el código:

En Alamofire 4.0 no es necesario validar manualmente entre los códigos 200..300. validate() método validate() hazlo automáticamente.

Documentation

Valida automáticamente el código de estado dentro del rango 200 ... 299, y que el encabezado Content-Type de la respuesta coincida con el encabezado Aceptar de la solicitud, si se proporciona uno.

Puede utilizar el parámetro de responseJSON en el método responseJSON . Contiene toda la información que necesita en su código.

Sobre el método de request

open func request(_ url: URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, encoding: ParameterEncoding = URLEncoding.default, headers: HTTPHeaders? = nil) -> DataRequest

Todos los parámetros, excepto la URL, son inicialmente nulos o tienen un valor predeterminado. Por lo tanto, no es problema agregar parámetros o encabezados a su solicitud.

Espero te ayude


clase FV_APIManager: NSObject

{

//MARK:- POST APIs class func postAPI(_ apiURl:String, parameters:NSDictionary, completionHandler: @escaping (_ Result:AnyObject?, _ Error:NSError?) -> Void) { var strURL:String = FV_API.appBaseURL if((apiURl as NSString).length > 0) { strURL = strURL + "/" + apiURl } _ = ["Content-Type": "application/x-www-form-urlencoded"] print("URL -/(strURL),parameters - /(parameters)") let api = Alamofire.request(strURL,method: .post, parameters: parameters as? [String : AnyObject], encoding: URLEncoding.default) // ParameterEncoding.URL api.responseJSON { response -> Void in print(response) if let JSON = response.result.value { print("JSON: /(JSON)") completionHandler(JSON as AnyObject?, nil) } else if let ERROR = response.result.error { print("Error: /(ERROR)") completionHandler(nil, ERROR as NSError?) } else { completionHandler(nil, NSError(domain: "error", code: 117, userInfo: nil)) } } }

Espero que esto te sea útil.