objective - alamofire swift 4 example
Argumento adicional ''método'' en llamada (15)
Obteniendo error al llamar al método de solicitud de Alamofire en la última versión (4.0.0).
La sintaxis es:
Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: .JSON, headers: [:])
el tipo de requestParam es [String: Any]
Actualizado para Swift 3:
let requestString = "https://thawing-inlet-46474.herokuapp.com/charge.php"
let params = ["stripeToken": token.tokenId, "amount": "200", "currency": "usd", "description": "testRun"]
Alamofire.request(requestString,method: .post, parameters: params, encoding: JSONEncoding.default, headers: [:]).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if response.result.value != nil{
print("response : /(response.result.value)")
}
break
case .failure(_):
print("Failure : /(response.result.error)")
break
}
}
Asegúrese de que sus
parameters
sean [Cadena: Cualquiera]
es decir
let parameters = ["foo": "bar"]
No:
let parameters : Parameter = ["foo": "bar"]
Esta es una familia de funciones que son muy similares, lo que hace que el compilador piense que está tratando de usar una función diferente. Verifique que TODOS los argumentos que está proporcionando sean el TIPO CORRECTO que se espera. Por ejemplo, estaba pasando [String: Any] para la variante con encabezados, que esperaba [String: String] y obtuve el mismo error.
Estaba enfrentando el mismo problema e intente con todas las respuestas que publiqué anteriormente aquí, y luego obtuve la solución y la razón de este problema.
Esto sucedió debido a que pasó el análisis de objeto incorrecto en la solicitud y finalmente la solución:
theJSONText
- cadena JSON
urlStr
: cadena de URL
let urlEncoadedJson = theJSONText.addingPercentEncoding(withAllowedCharacters:.urlHostAllowed)
let urls = NSURL(string:"urlStr/(urlEncoadedJson ?? "")")
let method: HTTPMethod = .get
Alamofire.request(urls! as URL, method: method, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
switch(response.result) {
case .success(_):
if response.result.value != nil
{
// write your code here
}
break
case .failure(_):
if response.result.error != nil
{
print(response.result.error!)
}
break
}
}
Nota: no hay ningún parámetro en mi URL.
Estaba teniendo el mismo problema, el problema está en el tipo de parámetros, debería ser del tipo [String: Any]. Después de hacer este cambio, funcionó para mí.
Alamofire.request(youUrl, method: .post, parameters: param as? [String: Any], encoding: JSONEncoding.default, headers: [:])
.responseJSON { response in
Lo arreglé asegurándome de que mis requestUrls son cadenas y no tipos de URL. También eliminé argumentos de parámetros para cuando el parámetro era nulo.
P.ej
Alamofire.request(requestUrl, method: .get, encoding: URLEncoding.default)
Los métodos de Almofire cambiaron en Swift 3 de la siguiente manera:
- Reordenar parámetros (url luego tipo de método).
- Cambie Enumding Enum para que sea "JSONEncoding.default", por ejemplo.
Mi problema estaba en los parámetros opcionales en los encabezados que no estaban desenvueltos.
Obtiene ese error debido a los tipos de datos incorrectos.
El tipo de parámetros debe ser [String: Any] y el tipo de parámetros no debe ser opcional.
El tipo de encabezado debe ser [String: String] o nil y el tipo de encabezado no debe ser opcional también.
Espero eso ayude. :-)
Siempre es porque estoy usando variables opcionales en cualquiera de los parámetros
Significa que algunos de los tipos de parámetros son incorrectos, compruebe que está enviando estos valores:
url: String
method: HTTPMethod (E.g: .post)
parameters: [String:Any]
encoding: ParameterEncoding (E.g: JSONEncoding.default)
headers: [String: String]
Solo puedo referirte a: https://github.com/Alamofire/Alamofire/issues/1508#issuecomment-246207682
Básicamente, si uno de sus parámetros es del tipo incorrecto, el compilador rápido asumirá que está utilizando
request(urlRequest:URLRequestConvertible)
y luego, el
method
es un
extra argument
HTTPHeaders
esos parámetros nuevamente y asegúrese de que todo sea del tipo correcto (
Parameters?
ParameterEncoding
y
HTTPHeaders
)
Tengo el problema, tengo que usar JSONEncoding.default en lugar de .JSON, por lo que la nueva sintaxis es
Alamofire.request(urlString,method: .post, parameters: requestParams, encoding: JSONEncoding.default, headers: [:])
solo asegúrese de que todos los parámetros estén en el formato correcto, lo más importante es que los parámetros deben estar en la matriz de tipo [String: Any].
Alamofire.request(url, method: .post, parameters: parameters, encoding:
JSONEncoding.default, headers: [:]).responseJSON
{ response in
switch (response.result) {
case .success:
print(response)
break
case .failure:
print(Error.self)
}
}