ios - Alamofire 完成处理程序返回响应+数据

标签 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)")



    }

我已将“响应”位添加到所有代码位中,我确定这是可能的吗?只是不知道如何实现它..

最佳答案

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

 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)")



    }

关于ios - Alamofire 完成处理程序返回响应+数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32222697/

相关文章:

swift - 如何将日期类型变量设置为初始值?

ios - 查看未在 iOS 模拟器中加载 xCode

javascript - 添加到 JavaScript 对象类的方法在遍历给定对象时出现

java - 在 JAVA 中 - 如何将 json 数据插入嵌套的 json 属性?

ios - 线程和 isExecuting 变量

iOS 状态恢复和 UINavigationController 模态视图

ios - 如何在 iOS 中本地化 UIDatePicker 中的月份文本,如果可能的话?

iphone - 自动旋转到iphone中的段 Controller

ios - UIImages exported as movie 错误

javascript - Google map 未加载变量值