使用Swift 1.2的AlamoFire:模糊地使用'responseJSON'

RMH*_*RMH 6 swift alamofire

我试图在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)
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 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)
            }
    })
Run Code Online (Sandbox Code Playgroud)

即通过显式声明闭包的参数名称而不是让它在方法paranthesis后跟踪.似乎新编译器在识别方法时存在问题.


RMH*_*RMH 4

将尾随闭包分离到其自己的变量中,然后调用 resonseJSON(closure) 可以解决问题,但我不确定为什么。有人有理由吗?这是工作代码:

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)


        }
}
Run Code Online (Sandbox Code Playgroud)