.request 调用中的额外参数 -- Alamofire + Swift



我正在尝试使用 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帖子,但他们的解决方案都没有解决我的问题:

  • 阿拉莫火雨燕 3.0 调用中的额外参数
  • 迅捷的阿拉莫火请求错误 - 调用中的额外参数

我也在 GitHub 上阅读了本文档指南和此问题线程,但都没有解决问题。

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

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

我浏览了文档并发现了两件事

  1. 请求方法签名,即

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

文档链接

  1. Parameter类型别名是一种[String:Any]类型
  2. ,当您传递时[String:String]冲突。

链接到 DOC 中的参数定义

所以你只需要做它改变签名,你很好。

我想出了问题,不感谢任何文档或 GitHub 线程。

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

我将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")
    }
  }
}

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

最新更新