使用Swift 1.2的AlamoFire:模仿使用' responseJSON'

时间:2015-02-16 13:31:15

标签: alamofire swift

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

        }
    }
}

4 个答案:

答案 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)为我解决了这个问题。