Argumento adicional de Alamofire Swift 3.0 en la llamada


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

Ahora recibo un error de "Argumento extra en llamada" en cada Alamofire.solicitud. Eg:

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

¿Puede alguien decirme por qué ?

Author: Matt Hampel, 2016-09-14

14 answers

De acuerdo con Alamofire la documentación para la versión 4.0.0 URL request con HTTP el método sería el 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)

Así que 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!

 74
Author: Abdullah Md. Zubair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-04 09:28:05

Este funcionó para mí.
No es necesario eliminar parámetro de codificación

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 son de tipo

[String:Any]?

En el 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 funciona con

JSONEncoding.default 

Para Encabezados

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

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

 66
Author: Rajan Maheshwari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-22 12:44:32

Método post 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 
                        }
                 }
 5
Author: Mohammad Kamran Usmani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-29 09:43:19

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

 4
Author: xevser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-09 14:20:59

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

Solicitud(.POST, patientIdUrl, parameters: nil, headers: nil, encoding: .JSON)

Espero que pueda ayudarte.

 1
Author: Chi Minh Trinh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-27 01:54:52

Este error es hasta el 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)")

        }

    }
 1
Author: oskarko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-24 08:25:35

Me encontré con este mismo Argumento extra 'method' en call error cuando mi variable URL estaba fuera de alcance.

En su caso, asegúrese de que ambos baseUrl y nextPatientIdUrl están en el alcance cuando se están utilizando el método Alamofire.request(patientIdUrl,..).

Esperemos que esto resuelva su problema. Gracias!

 1
Author: onlinebaba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-27 08:54:49

Para mí esto está funcionando.

Para la solicitud GET

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 .

 0
Author: Narasimha Nallamsetty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-21 09:29:02

Solucioné este problema con:

  1. Reordenar parámetros (url entonces tipo de método).
  2. Cambie la enumeración de codificación para que sea "JSONEncoding.por defecto", por ejemplo.

Tenga en cuenta que: Cambio de firma de métodos Alamofire en Swift 3

 0
Author: Ahmed Lotfy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-03 08:14:13

Dos cosas que encontré dignas de mención.

  1. Elimine la primera etiqueta url antes de su valor. Utilizar Alamofire.request("https://yourServiceURL.com", method: .post, en 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.
 0
Author: Jiang Xiang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-02 23:09:28

Copié este código de Alamofire,creé una URLRequest y usé Alamofire.método request (URLRequest), evite este error

originalRequest = try URLRequest(url: url, method: method, headers: headers)
let encodedURLRequest = try encoding.encode(originalRequest!, with: parameters)
 0
Author: Arthur Liu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-02 10:50:48

Solucioné este problema de esta manera:

Simplemente elimine los parámetros adicionales, solo parameters, encoding y headers, si estos parámetros son nil puede eliminar entonces y dejar de esta manera,

Alamofire.request(yourURLString, method: .post)
 0
Author: Vinicius Carvalho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-04 01:41:19
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!)
    }
}
 0
Author: jignesh kasundra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-17 12:27:45

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

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
            }
    }
 0
Author: Pritesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-14 12:22:46