Alamofire Completion Handler返回响应+数据

时间:2015-08-26 09:22:18

标签: ios json swift alamofire swifty-json

我有一个函数,在其中包含一个responseObject的完成处理程序。此时,当我调用它时,它会返回json主体,以及任何错误。

我正在使用的API的某些部分,不会在响应正文中返回任何数据,它们只返回响应(200,404等等)

我正在考虑将响应附加到返回的空json对象中,然后意识到这将是愚蠢的,如果我返回NSHTTPURLResponse也可能会更好,但我发现的所有内容都只是解释了如何返回responseObject以及错误...

这是返回完成处理程序的函数:

func makePostRequest(url : String, params : AnyObject, completionHandler: (responseObject:  NSHTTPURLResponse, JSON?, error: NSError?) -> ())  -> Request? {


    println("params = \(params)")
    return Alamofire.request(.POST, url, parameters: params as? [String : AnyObject], encoding: .JSON)


        .responseJSON { (request, response, data, error) in completionHandler(
            //This is wrong
            response: response as? NSHTTPURLResponse,
            responseObject:
            {
                println("Request is \(request)")

                println("Response is \(response)")

                println("Data is \(data)")

                println("Error is \(error)")

                //Append the response to this JSON object?
                //
                var json:JSON = [:]


                if let anError = error
                {

                    println(error)
                }
                else if let data: AnyObject = data
                {

                    json = JSON(data)

                }


                //probably better to return the two...
                //
                return (response, json)

                }(),
            error: error

            )
    }
}

这就是它的用法:

networking.makePostRequest(documentUrl, params: docParams) { response, json, error  in


           println("response is: \(response)")

        println("document json: \(json)")

         println("document error: \(error)")



    }

我已添加回复'比特到所有代码位,我确定这是可能的吗?只是不确定如何实现它..

1 个答案:

答案 0 :(得分:0)

对于那些试图弄清楚如何以这种方式返回东西的人,我解决了这个问题:

 func makePostRequest(url : String, params : AnyObject, completionHandler: (httpResponse: NSHTTPURLResponse, responseObject:JSON?, error: NSError?) -> ())  -> Request? {


    println("params = \(params)")
    return Alamofire.request(.POST, url, parameters: params as? [String : AnyObject], encoding: .JSON)


        .responseJSON { (request, response, data, error) in completionHandler(
            //This is wrong
            httpResponse: response!,
            responseObject:
            {
                println("Request is \(request)")

                println("Response is \(response)")

                println("Data is \(data)")

                println("Error is \(error)")

                //Append the response to this JSON object?
                //
                var json:JSON = [:]


                if let anError = error
                {

                    println(error)
                }
                else if let data: AnyObject = data
                {

                    json = JSON(data)

                }
                 return json
            }(),
            error: error

            )
    }
}

然后像这样调用它:

 networking.makePostRequest(workDocumentUrl, params: params) { response, json, error  in

        if response.statusCode == 200{
       //do something

        }

        println("json: \(json)")
        println("error: \(error)")



    }