Как получить доступ к ответу alamofire - PullRequest
0 голосов
/ 11 сентября 2018

Я новичок в iOS, и у меня есть некоторый код Swift в приложении, который должен переключать случаи в зависимости от сообщения об ошибке, которое я получаю с сервера. Сообщение обернуто, и я не могу добраться до него. Вот код

func sendAlamofireRequest(submissionURL: URL, parameters: Parameters, chosenTracker: String) -> String {

    var outputMessage = ""

    Alamofire.request(submissionURL, method: .post, parameters: parameters, encoding: JSONEncoding.default).validate().responseString() {
        response in
        switch response.result {
        case .success:
            print("Validation Successful...\(String(describing: response.value))")

            print("response value: \(String(response.value!))")
            switch response.value {
            case "error_none"?:
                outputMessage = "No matching Group Code. If you are having trouble, please go to \nhttps://app.phillyscientists.com"
                break
            case "error_tooManyIDs"?:
                outputMessage = "Error, please contact developer."
                break
            case "error_noGroupIDReceived"?:
                outputMessage = "Try Again."
                break
            default:

                let JSONResponse : JSON = JSON.init(parseJSON: response.result.value!)

                //uncomment this section for debugging
                //                        print("=================<JSON RESP>=================");
                //                        print(JSONResponse)
                //                        print("=================</JSON RESP/>=================");
                //
                let teacherNameGot = self.parseJSONData(json: JSONResponse, trackerValuePassed: chosenTracker)
                self.saveJSONDataToUserDefaults(teacher: teacherNameGot)

//                    outputMessage = "Logged In Successfully!"

                break
            }

        case .failure(let error):
            outputMessage = String(error.localizedDescription)
            print(outputMessage)

        }
    }
    return outputMessage
}

Вот вывод из консоли:

Validation Successful...Optional("{\"Error\":\"error_none\"}")
response value: Optional("{\"Error\":\"error_none\"}")

Как мне получить значение, чтобы корпус переключателя действительно начал работать? Спасибо!

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Кажется, что вывод находится в Json, поэтому мне нужно отобразить его в объект (или класс, как вы его называете). Если вы считаете, что оно того не стоит, вы можете преобразовать его в словарь, я думаю, что оно также будет работать

0 голосов
/ 12 сентября 2018

@ Густаво Каиафа прав, сопоставляя его с JSON, добился цели.Вот код для тех, кто застрял на чем-то похожем:

Alamofire.request(submissionURL, method: .post, parameters: parameters, encoding: JSONEncoding.default).validate().responseString() { (response) in

        let outputResponseJSON : JSON = JSON.init(parseJSON: response.result.value!)
        let outputResponseText = JSON(outputResponseJSON)["Error"].stringValue

        switch response.result {
        case .success:
            print("Validation Successful...\(String(describing: response.value))")

            print("response value: \(String(describing: String(outputResponseText)))")
            switch outputResponseText {
            case "error_none":
                outputMessage = "No matching Group Code. If you are having trouble, please go to \nhttps://app.phillyscientists.com"
                print(outputMessage)
                break
            case "error_tooManyIDs":
                outputMessage = "Error, please contact developer."
                print(outputMessage)
                break
            case "error_noGroupIDReceived":
                outputMessage = "Try Again."
                print(outputMessage)
                break
            default:

                let JSONResponse : JSON = JSON.init(parseJSON: response.result.value!)

Ответ - использование SwiftyJSON для значений outputResponseJSON и outputResponseText.

0 голосов
/ 12 сентября 2018

вы можете использовать метод Alamofire .responseJSON, который даст вам http-объект, имеющий несколько атрибутов, таких как request и response.Возьмем этот код в качестве примера:

Alamofire.request("https://your-service-url.com/api", method: .post, parameters: paremeters, encoding: JSONEncoding.default, headers: headers).responseJSON{ (data) in

            guard let statusCode = data.response?.statusCode, statusCode == 200, let result = data.result.value as? [[String: Any]] else{
                print("Error with HTTP status \(data.response?.statusCode ?? 0)")

                return
            }
            var events : [Event] = []
            result.forEach({ (rawEvent) in
                events.append(Event(from: rawEvent))
            })


            handler(events, statusCode)
    }

Обратите внимание, как я играю там с объектами, которые предоставляет .responseJSON, и как я получаю результирующий массив из службы, получая доступ к data.result.value (при этомбудет зависеть от структуры данных вашего сервисного ответа)

...