Обработчик завершения Alamofire возвращает ответ + данные

У меня есть функция, которая включает в себя 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)")



    }

Я добавил биты ответа ко всем битам кода, я уверен, что это возможно? просто не знаю, как этого добиться ..


person dyatesupnorth    schedule 26.08.2015    source источник
comment
это потому, что вы возвращаете request, а не его respose, следуйте этому stackoverflow.com/questions/31608302/   -  person Hamza Ansari    schedule 26.08.2015
comment
этот вопрос по-прежнему показывает только, как вернуть одно значение ...   -  person dyatesupnorth    schedule 26.08.2015
comment
что вы хотите в обработчике завершения   -  person Hamza Ansari    schedule 26.08.2015
comment
ЗавершениеHandler: (responseObject: NSHTTPURLResponse, JSON ?, ошибка: NSError?), обратите внимание на NSHTTPURLResponse ...   -  person dyatesupnorth    schedule 26.08.2015


Ответы (1)


Для тех, кто застрял, пытаясь понять, как вернуть вещи таким образом, я решил это так:

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



    }
person dyatesupnorth    schedule 27.08.2015