【问题标题】:Extra argument in .request call -- Alamofire + Swift.request 调用中的额外参数——Alamofire + Swift
【发布时间】:2018-08-26 03:54:55
【问题描述】:

我正在尝试使用 Alamofire 4 和 Swift 4 进行 .request() 调用。这是我正在使用的代码:

static func getPlaceData(url: String, parameters: [String: String]) {
    Alamofire.request(url, method: .get, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in
        if response.result.isSuccess {
            let json: JSON = JSON(response.result.value!)
            print(json)
        } else {
            print("error")
        }
    }
}

headers 在哪里:

let headers: HTTPHeaders = [
        "Authorization": "Bearer /*PRIVATE KEY*/"
]

我收到以下错误: 调用中的额外参数“方法”,位于Alamofire.request(... 行。

我已经阅读了很多关于类似问题的 SO 帖子,但他们的解决方案都没有解决我的问题:

我也阅读了this documentation guidethis issues thread on GitHub,但都没有解决问题。

.request() 调用需要 parametersheaders 的正确语法是什么?

该代码用于使用 Yelp Fusion API 从 Swift 代码进行经过身份验证的调用——也许有人可以提出比 Alamofire 更好的方法?

【问题讨论】:

  • 您能否尝试将参数更改或转换为 [String: Any]
  • @Aakash 尝试转换为 [String: Any],但我遇到了同样的错误

标签: ios swift alamofire


【解决方案1】:

我翻阅了文档,发现了两件事

  1. 请求方法签名是

     public func request(
        _ url: URLConvertible,
        method: HTTPMethod = .get,
        parameters: Parameters? = nil,
        encoding: ParameterEncoding = URLEncoding.default,
        headers: HTTPHeaders? = nil)
        -> DataRequest
    

Link to the documentation

  1. Parameter typeAlias 是[String:Any] 的类型,当您传递[String:String] 时,这是冲突的。

Link to the Parameter Definition in the DOC

因此,您只需更改签名即可。

【讨论】:

  • 感谢您的建议,尝试此方法无济于事 - 请参阅我的答案以了解对我有用的方法
【解决方案2】:

我发现了这个问题,不感谢任何文档或 GitHub 线程。

上述代码 sn-p 中的逻辑(来自问题)引用了一个名为 headers 的常量,该常量在 getPlaceData(url:parameters:) 之外声明。这是因为要访问 Yelp Fusion API,您需要在发送的 HTTP 标头中包含一个额外字段,以使用提到的格式包含私有 API 密钥 here

我将headers 数据结构移到getPlaceData(url:parameters:) 中,它解决了这个问题,所以我得到的函数如下:

static func getPlaceData(url: String, parameters: [String: String]) {
  let headers: HTTPHeaders = [
    "Authorization": "Bearer /*PRIVATE KEY*/"
  ]

  Alamofire.request(url, method: .get, parameters: parameters, encoding: 
  JSONEncoding.default, headers: headers).responseJSON { (response) in
    if response.result.isSuccess {
      let json: JSON = JSON(response.result.value!)
      print(json)
    } else {
      print("error")
    }
  }
}

不知道为什么这解决了问题,但代码现在可以工作了。

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 2017-01-22
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多