如何从HTTPPost中返回swift中的JSON

时间:2015-08-03 18:24:36

标签: ios json swift

我是iOS开发新手,需要一些JSON帮助以及返回的内容。我的模态中有以下功能:

 func loginRequest(username: String, password: String, completionHandler: ((NSURLResponse!, JSON, NSError?) -> Void)) {
        var request : NSMutableURLRequest = NSMutableURLRequest()
        request.URL = NSURL(string: ""correct post url"\(username)/\(password)")
        request.HTTPMethod = "POST"

        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in
            var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
            let httpResponse = response as? NSHTTPURLResponse

            var json = JSON(data: data!)
            println(json)


        })

    }

如果我在此函数中打印它,它会成功返回JSON。但是,我的视图控制器中的以下代码不会产生任何错误,但根本无法返回JSON。

@IBAction func signIn(sender: UIButton) { 

 modal.loginRequest("Test", password: "Pass") { (response, json, error) -> Void in
        println(json)
        println("Hello")
        if (json != nil) {
                Do parsing stuff
           }
    }

在我的ViewController中,json不会返回nil,它根本不会返回。代码从我的模态打印,但不在VC中显示。我怎么称错函数?

1 个答案:

答案 0 :(得分:1)

你的函数没有调用作为param传递的完成处理程序闭包。但是,如果要访问数据,则必须调用completionHandler闭包。这就是您的代码应该如何:

func loginRequest(username: String, password: String, completionHandler: ((NSURLResponse!, JSON, NSError?) -> Void)) {
    var request : NSMutableURLRequest = NSMutableURLRequest()
    request.URL = NSURL(string: ""correct post url"\(username)/\(password)")
    request.HTTPMethod = "POST"

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in
        var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
        let httpResponse = response as? NSHTTPURLResponse

        var json = JSON(data: data!)
        println(json)

        // call the closure argument here, to pass the asynchrounsly retrieved vallues
        // back to the caller of loginRequest
        completionHandler(response, json, error)

    })

}