swiftyjson source responsedata manager example alamofire swift3

source - Alamofire Swift 3.0 Argumento adicional en llamada



swiftyjson alamofire (14)

Método de publicación Alamofire 4.0 con Swift 3.0 y xCode 8.0

Alamofire.request(URL, method: .post, parameters: PARAMS) .responseJSON { closureResponse in if String(describing: closureResponse.result) == "SUCCESS" { // Sucess code } else { // Failure Code } }

He migrado mi proyecto a Swift 3 (y actualicé Alamofire a la última versión de Swift 3 con el pod ''Alamofire'', ''~> 4.0'' en el Podfile).

Ahora aparece el error "Argumento adicional en la llamada" en cada solicitud de Alamofire.request. P.ej:

let patientIdUrl = baseUrl + nextPatientIdUrl Alamofire.request(.POST, patientIdUrl, parameters: nil, headers: nil, encoding: .JSON)

Puede alguien decirme por qué ?


Acabo de resolver el mismo problema que tú tienes. El problema es que he importado Alamofire en el encabezado, así que solo elimino el Alamofire cuando solicito una llamada. Como eso:

solicitud (.POST, patientIdUrl, parámetros: nil, encabezados: nil, codificación: .JSON)

Espero que te pueda ayudar.


Copio este código de Alamofire, creo una URLRequest y utilizo el método Alamofire.request (URLRequest), evito este error

originalRequest = try URLRequest(url: url, method: method, headers: headers) let encodedURLRequest = try encoding.encode(originalRequest!, with: parameters)


Dos cosas que encontré dignas de mención.

  1. Elimine la primera etiqueta de URL antes de su valor. Utilice Alamofire.request("https://yourServiceURL.com", method: .post, lugar de Alamofire.request(url: "https://yourServiceURL.com", method: .post,
  2. Asegúrese de que el tipo de datos de los parámetros es [String: String] . Declararlo explícitamente.

Este error depende del valor de los parámetros. Tiene que ser [String: String]

let url = URL(string: "http://yourURLhere")! let params: [String: String] = ["name": "oskarko", "email": "[email protected]", "sex": "male"] Alamofire.request(url, method: .post, parameters: params, encoding: URLEncoding.default, headers: nil).validate(statusCode: 200..<600).responseJSON() { response in switch response.result { case .success: var result = [String:String]() if let value = response.result.value { let json = JSON(value) } case .failure(let error): print("RESPONSE ERROR: /(error)") } }


Este me funcionó.
No es necesario eliminar el parámetro de codificación

Actualización para Swift 5.x

Alamofire usa el tipo de Result introducido en Swift 5 .
También Alamofire.request se ha cambiado a AF.request que ahora leerá su valor de response.result con .success y .failure

AF.request("https://yourServiceURL.com", method: .get, parameters: [:], encoding: URLEncoding.default, headers: ["":""]).responseJSON { (response:DataResponse<Any>) in switch response.result { case let .success(value): print(value) case let .failure(error): print(error) } }

Swift 3.x / 4.x

Alamofire.request("https://yourServiceURL.com", method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in switch(response.result) { case .success(_): if let data = response.result.value{ print(response.result.value) } break case .failure(_): print(response.result.error) break } }

y asegúrese de que los parámetros sean de tipo

[String:Any]?

En caso de obtener

Alamofire.request("https://yourGetURL.com", method: .get, parameters: ["":""], encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in switch(response.result) { case .success(_): if let data = response.result.value{ print(response.result.value) } break case .failure(_): print(response.result.error) break } }

Incluso trabaja con

JSONEncoding.default

Para encabezados

Si está pasando encabezados, asegúrese de que su tipo sea [String:String]

Ir a través del Parameter Encoding Link https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#parameter-encoding-protocol


Me encontré con este mismo ''método'' de argumento adicional en el error de llamada cuando mi variable de URL estaba fuera de alcance .

En su caso, asegúrese de que tanto baseUrl como nextPatientIdUrl estén dentro del alcance cuando se utilizan el Alamofire.request(patientIdUrl,..) .

Esperemos que esto resuelva tu problema. ¡Gracias!


Mi solución es si está usando encabezados, su tipo debe ser [String: String].


Para mí esto está funcionando.

Para obtener una solicitud

Alamofire.request("http://jsonplaceholder.typicode.com/todos/1/get").responseJSON { (response:DataResponse<Any>) in switch(response.result) { case .success(_): if response.result.value != nil{ print(response.result.value!) } break case .failure(_): print(response.result.error) break } }

Para POST

let parameters = NSDictionary(object: "nara", forKey: "simha" as NSCopying) Alamofire.request("http://jsonplaceholder.typicode.com/posts", method: HTTPMethod.post, parameters: parameters as? Parameters, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in switch(response.result) { case .success(_): if response.result.value != nil{ print(response.result.value!) } break case .failure(_): print(response.result.error) break } }

Gracias @ Rajan Maheswari .


Según la documentación de Alamofire para la versión 4.0.0, la solicitud de URL con el método HTTP sería la siguiente:

Alamofire.request("https://httpbin.org/get") // method defaults to `.get` Alamofire.request("https://httpbin.org/post", method: .post) Alamofire.request("https://httpbin.org/put", method: .put) Alamofire.request("https://httpbin.org/delete", method: .delete)

Entonces su solicitud de URL será:

Alamofire.request(patientIdUrl, method: .post, parameters: nil, encoding: JSONEncoding.default, headers: nil)

y una solicitud de muestra será:

Alamofire.request(url, method: .post, parameters: param, encoding: JSONEncoding.default, headers: [AUTH_TOKEN_KEY : AUTH_TOKEN]) .responseJSON { response in print(response.request as Any) // original URL request print(response.response as Any) // URL response print(response.result.value as Any) // result of response serialization }

¡Espero que esto ayude!


Si ha agregado archivos de Alamofire localmente, no use "Alamofire" antes de solicitar

let apipath = “your api URL” request(apipath, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON { response in switch(response.result) { case .success(_): do { let JSON = try JSONSerialization.jsonObject(with: response.data! as Data, options:JSONSerialization.ReadingOptions(rawValue: 0)) guard let JSONDictionary: NSDictionary = JSON as? NSDictionary else { print("Not a Dictionary") return } print("Post Response : /(JSONDictionary)") } catch let JSONError as NSError { print("/(JSONError)") } break case .failure(_): print("failure Http: /(String(describing: response.result.error?.localizedDescription))") break } }


Solucioné este problema con:

  1. Reordenar parámetros (url luego tipo de método).
  2. Cambie Enumding Enum para que sea "JSONEncoding.default", por ejemplo.

Tenga en cuenta que: los métodos de Alamofire cambian la firma en Swift 3


Solucioné este problema de esta manera:

Simplemente elimine los parámetros adicionales, solo los parameters , la encoding y los headers , si estos parámetros son nulos, puede eliminarlos y salir de esta manera,

Alamofire.request(yourURLString, method: .post)


func API() { if Reachability.isConnectedToNetwork() { let headers = ["Vauthtoken":"Bearer /(apiToken)"] print(headers) // let parameter = ["iLimit":"10","iOffset":"0","iThreadId":"1"] ApiUtillity.sharedInstance.showSVProgressHUD(text: "Loding...") Alamofire.request(ApiUtillity.sharedInstance.API(Join: "vehicle/CurrentVehicleLists"), method:.get, parameters:nil, headers: headers).responseJSON { response in switch response.result { case .success: print(response) ApiUtillity.sharedInstance.dismissSVProgressHUD() let dictVal = response.result.value let dictMain:NSDictionary = dictVal as! NSDictionary let statusCode = dictMain.value(forKey: "status") as! Int if(statusCode == 200) { } else if statusCode == 401 { } else { } case .failure(let error): print(error) ApiUtillity.sharedInstance.dismissSVProgressHUD() } } } else { ApiUtillity.sharedInstance.dismissSVProgressHUD() ApiUtillity.sharedInstance.showErrorMessage(Title: "Internet Connection", SubTitle: "Internet connection Faild", ForNavigation: self.navigationController!) } }