我正在尝试使用 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 上阅读了本文档指南和此问题线程,但都没有解决问题。
具有所需parameters
和headers
的.request()
调用的正确语法是什么?
该代码用于使用 Yelp Fusion API 从 Swift 代码进行经过身份验证的调用——也许有人可以提出比 Alamofire 更好的方法?
我浏览了文档并发现了两件事
-
请求方法签名,即
public func request( _ url: URLConvertible, method: HTTPMethod = .get, parameters: Parameters? = nil, encoding: ParameterEncoding = URLEncoding.default, headers: HTTPHeaders? = nil) -> DataRequest
文档链接
Parameter
类型别名是一种[String:Any]
类型
,当您传递时
[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")
}
}
}
不知道为什么这会解决问题,但代码现在可以工作了。