我试图在XCode 6.3中使用AlamoFire和Swift 1.2。我已经解决了大部分问题(即改变为!)但我有一个我无法弄清楚的问题。
以下代码 - 以及类似的代码片段 - 在第5行(“req.responseJSON(){”)生成编译时错误消息“不明确地使用'responseJSON'”。我需要在AlamoFire库或我的代码中进行哪些更改才能修复它?注意:我按照文档中的描述导入了项目,它在Swift 1.1和XCode 6.1.1
中运行得非常好func theaters(delegate:GlobalNetworkingDelegate){
if let url = self.mainNetworkingUrl{
var urlToUse = url + "theaters"
var req:Request = Alamofire.request(.GET, urlToUse, parameters: [:], encoding: .URL)
req.responseJSON(){
(req, response, jsonOut, error) in
if(response.statusCode == 200 && error == nil){
var ajson = JSON(jsonOut!)
delegate.globalTheatersOutomce!(true, json: jsonOut, error: error)
}
}
}
}
答案 0 :(得分:5)
我还得到了以下工作:
Alamofire.manager.request(.PUT, pathWithId(user.key), parameters: user.toDict(), encoding: .JSON)
.responseString( completionHandler: {
(request: NSURLRequest, response: NSHTTPURLResponse?, responseBody: String?, error: NSError?) -> Void in
if responseBody == "OK" {
completion(user, nil)
} else {
completion(nil, error)
}
})
即。通过显式声明闭包的参数名称而不是让它在方法paranthesis后跟踪。似乎新编译器在识别方法时存在问题。
答案 1 :(得分:4)
将尾随闭包分成它自己的变量,然后调用resonseJSON(闭包)修复了这个问题,但我不确定为什么。有人有理由吗?这是工作代码:
func theaters(delegate:GlobalNetworkingDelegate){
if let url = self.mainNetworkingUrl{
var urlToUse = url + "theaters"
var req:Request = Alamofire.request(.GET, urlToUse, parameters: [:], encoding: .URL)
var aClosure = {(req:NSURLRequest, response:NSHTTPURLResponse?, jsonOut:AnyObject?, error:NSError?) -> Void in
if(response!.statusCode == 200 && error == nil){
var ajson = JSON(jsonOut!)
delegate.globalTheatersOutomce!(true, json: jsonOut, error: error)
}
}
req.responseJSON(aClosure)
}
}
答案 2 :(得分:1)
如果你将闭包裹在()中而不是让它尾随它也可以。它的工作原理和其他答案一样,只是另一种写作方式。
func theaters(delegate:GlobalNetworkingDelegate){
if let url = self.mainNetworkingUrl {
var urlToUse = url + "theaters"
var req:Request = Alamofire.request(.GET, urlToUse, parameters: [:], encoding: .URL)
req.responseJSON({
(req, response, jsonOut, error) in
if(response.statusCode == 200 && error == nil){
var ajson = JSON(jsonOut!)
delegate.globalTheatersOutomce!(true, json: jsonOut, error: error)
}
})
}
}
答案 3 :(得分:1)
我遇到了同样的问题。将Alamofire更新到最新版本(在我写答案时为1.2.2)为我解决了这个问题。