Alamofire Swift 3.0在调用中的额外参数

我已经将我的项目迁移到Swift 3(并且在Podfile中将Alamofire更新为最新的Swift 3版本,带有pod 'Alamofire', '~> 4.0' )。

每一个Alamofire.request我现在都会得到一个“额外的参数调用”错误。 例如:

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

有人可以告诉我为什么?

根据Alamofire 4.0.0版本的文档,使用HTTP方法的URL请求将如下所示:

 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) 

所以你的url请求将是:

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

样品申请将是:

 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 } 

希望这可以帮助!

这个为我工作。
不需要删除编码参数

Swift 3.0

 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 } } 

并确保参数是types的

 [String:Any]? 

Get的情况下

 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 } } 

即使与作品

 JSONEncoding.default 

对于标题

如果你传递头文件,确保它们的types应该是[String:String]

通过Parameter Encoding Link https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md#parameter-encoding-protocol

使用Swift 3.0和xCode 8.0的Post方法Alamofire 4.0

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

我的解决scheme是,如果您使用标题,其types必须是[string:string]。

这个错误取决于参数值。 它必须是[String:String]

 let url = URL(string: "http://yourURLhere")! let params: [String: String] = ["name": "oskarko", "email": "youremail@here.com", "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)") } } 

对我来说这是工作。

对于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 } } 

对于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 } } 

谢谢@ Rajan Maheswari

我解决了这个问题:

  1. 重新sorting参数(url然后方法types)。
  2. 例如,更改编码枚举为“JSONEncoding.default”。

请注意:在Swift 3中Alamofire方法的签名更改

有两件事我觉得值得注意。

  1. 删除它的值之前的第一个url标签。 使用Alamofire.request("https://yourServiceURL.com", method: .post,而不是Alamofire.request(url: "https://yourServiceURL.com", method: .post,
  2. 确保参数的数据types是[String: String] 。 明确声明。

我从Alamofire复制这段代码,创build一个URLRequest并使用Alamofire.request(URLRequest)方法,避免这个错误

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

我只是解决了同样的问题,因为你有。 问题是我已经在标题中导入Alamofire,所以我只是在通话请求时删除Alamofire。 像那样:

请求(.POST,patientIdUrl,参数:无,标题:无,编码:.JSON)

我希望它可以帮助你。

我这样解决这个问题:

只要删除额外的参数,只是parametersencodingheaders ,如果这些参数是零你可以删除然后离开这种方式,

Alamofire.request(yourURLString, method: .post)