AlamoFire与Swift 1.2:使用';回应';
我正试图在XCode 6.3中将AlamoFire与Swift 1.2结合使用。我已经解决了大部分问题(例如,更改为as!),但我有一个问题无法解决 下面的代码(以及类似的代码片段)在第5行(“req.responseJSON(){”)处生成一个编译时错误,并显示消息“不明确地使用'responseJSON'”。我需要在AlamoFire库中更改什么或修改代码来修复它?注意:我按照文档中的描述导入了该项目,它在Swift 1.1和XCode 6.1.1中工作得非常出色AlamoFire与Swift 1.2:使用';回应';,alamofire,swift,Alamofire,Swift,我正试图在XCode 6.3中将AlamoFire与Swift 1.2结合使用。我已经解决了大部分问题(例如,更改为as!),但我有一个问题无法解决 下面的代码(以及类似的代码片段)在第5行(“req.responseJSON(){”)处生成一个编译时错误,并显示消息“不明确地使用'responseJSON'”。我需要在AlamoFire库中更改什么或修改代码来修复它?注意:我按照文档中的描述导入了该项目,它在Swift 1.1和XCode 6.1.1中工作得非常出色 func theaters
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)
}
}
}
}
将尾部闭包分离为自己的变量,然后调用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)
}
}
我还完成了以下工作:
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)
}
})
i、 e.通过显式声明闭包的参数名,而不是让它在方法结束后跟踪。似乎新编译器在识别其他方法时有问题。如果将闭包包装为()它不是拖在后面,而是同样有效。它的工作原理与这里的其他答案相同,只是另一种书写方式
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)
}
})
}
}
我遇到了同样的问题。将您的Alamofire更新到最新版本(我写答案时为1.2.2)为我解决了问题。出于某种原因,分离尾随闭包解决了问题。不知道为什么。有人吗?用Alamofire解决了同样的问题,奇怪……有什么合乎逻辑的解释吗?