Alamofire4在使用方法时抛出“额外参数方法”:.post

Posted

技术标签:

【中文标题】Alamofire4在使用方法时抛出“额外参数方法”:.post【英文标题】:Alamofire4 throwing "extra argument method" when using method: .post 【发布时间】:2017-01-28 00:02:07 【问题描述】:

我一直在从 Swift2/AF3 过渡到 Swift3/AF4,这绝对是一场噩梦。 Xcode 抛出“额外参数方法”错误,但这是错误的,这使我几乎不可能找到实际错误是什么。在我的代码周围的多个地方,我有

Alamofire.request(url, method: .put, parameters: parameters,
 encoding: JSONEncoding.default, headers: headers).validate().responseJSON()  response in ... 

其中urlstringmethod 是可用的枚举之一,parametersheaders[String: Any]。但是当我将方法更改为 .post 时,我得到“额外参数”错误。我一生都无法弄清楚这有什么问题。我尝试了.validate() 和没有。

let url = "myStringHere"
let params = ["myString": myString] as [String: Any]
let headers = ["Authorization": myString, "AnotherString": stringValue] as [String: Any]

Alamofire.request(url, method: .post, parameters: params, 
  encoding: JSONEncoding.default, headers: headers).responseJSON(completionHandler:  response in ... 

为了便于阅读,我添加了一个换行符。 validate() 将在 request()responseJSON 之间切换,就像我对 .put 方法所做的那样,我已将其更新为新语法而不会出现此问题。我在这里完全不知所措。

编辑:只是想说我已经通过进入 .post request() 和选项+单击变量来仔细检查它们的类型来确保类型。唯一不能使用 option+click 的是method: .post。我检查了其他答案,但没有一个有效,大多数只是来自encoding: .json -> encoding: JSONEncoding.default 的问题,但你可以清楚地看到这就是我所拥有的。

edit2:尝试将encoding 切换为URLEncoding.httpBody,但这也没有奏效。我从 Alamofire 收到一百万个错误,我的 Xcode 甚至无法一次处理它们。这有什么关系吗?

【问题讨论】:

【参考方案1】:

“标题”参数类型是 [String : String],而不是 [String : Any]。你被误导性的错误描述抓住了。

【讨论】:

天哪,我认为这解决了它。我的代码到处都使用 AF,所以我有数百个错误需要自己修复。头撞墙这么久了。非常感谢!!! 我建议制作一个像 RequestHandler 这样的适配器。唯一使用 Alamofire API 的对象。这样,迁移到新版本的 Alamofire 将在一个地方进行,因为您项目的其他部分将使用适配器的 API。 所以就像制作我自己的 MyRequest.request() 一样,它接受 AF.request() 所需的参数,然后当 AF 代码更改时,我只需要更改 MyRequest 中的一个函数上课? 是的,没错。如果更改参数名称或其他内容,更新某些 Alamofire API 的每次出现并不是很有趣。创建自己的适配器以使用某些框架是一种常见的做法。

以上是关于Alamofire4在使用方法时抛出“额外参数方法”:.post的主要内容,如果未能解决你的问题,请参考以下文章

通话中的 Alamofire 额外参数“方法”

Hibernate 在尝试使用合并方法更新对象时抛出 DataIntegrityViolationException

JSON.Net 在使用 [JsonConvert()] 时抛出 ***Exception

MenuItem.setIcon 在使用 BottomNavigationBar 时抛出 NullPointerException

JMockit 期望 API:如何在方法/构造函数调用时抛出异常

我在使用 HashMap 时抛出 java.util.ConcurrentModificationException