我正在尝试使用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 guide和this issues thread on GitHub,但都没有解决问题。
.request()
调用所需parameters
和headers
的正确语法是什么?
该代码用于使用Yelp Fusion API从Swift代码进行经过身份验证的调用 - 也许有人可以建议比Alamofire更好的方法?
答案 0 :(得分:2)
我查看了文件,发现了两件事
请求方法签名
public func request(
_ url: URLConvertible,
method: HTTPMethod = .get,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil)
-> DataRequest
Parameter
typeAlias是[String:Any]
的一种类型,当您传递[String:String]
时会发生冲突。 Link to the Parameter Definition in the DOC
所以你需要做的就是改变签名而且你很好。
答案 1 :(得分:0)
我想出了这个问题,不用多于任何文档或GitHub线程。
上面代码片段中的逻辑(来自问题)引用了一个名为headers
的常量,该常量在getPlaceData(url:parameters:)
之外声明。这是因为为了访问Yelp Fusion API,您需要在发送的HTTP
标题中包含一个额外字段,以使用here提到的格式包含私有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")
}
}
}
不确定为什么这会解决问题,但代码现在可以正常工作。