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 。
我解决了这个问题:
- 重新sorting参数(url然后方法types)。
- 例如,更改编码枚举为“JSONEncoding.default”。
请注意:在Swift 3中Alamofire方法的签名更改
有两件事我觉得值得注意。
- 删除它的值之前的第一个url标签。 使用
Alamofire.request("https://yourServiceURL.com", method: .post,
而不是Alamofire.request(url: "https://yourServiceURL.com", method: .post,
- 确保参数的数据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)
我希望它可以帮助你。
我这样解决这个问题:
只要删除额外的参数,只是parameters
, encoding
和headers
,如果这些参数是零你可以删除然后离开这种方式,
Alamofire.request(yourURLString, method: .post)