Alamofire Parse JSON MSG и статус - PullRequest
0 голосов
/ 23 мая 2019

Я хочу отобразить сообщение на UITextView, используя статус, но на нем отображается «Success: 200»:

{"status": 500, "msg": "\" Informationневерно \ ""}

Я использую Swift4 в XCode10, вот мой код:

import UIKit
import Alamofire
import SwiftyJSON

class VerifyAccount: UIViewController {

    let verify_url = "http://192.168.43.222:3000/mobile/account_verification"

    @IBOutlet weak var msgHandler: UITextView!

    func postData(url: String ,  parameters: [String : String]) {
        Alamofire.request(url, method: .post, parameters: parameters).responseJSON {
            response in
            if response.result.isSuccess {
                let postJSON : JSON = JSON(response.result.value!)
                print(postJSON)

                if let status = response.response?.statusCode {
                    switch(status) {
                    case 200:
                        self.msgHandler.text = ("Success: \(status)")
                    case 500:
                        self.msgHandler.text = ("Invalid: \(status)")
                    default:

                    }
                }
            } else {
                print("Error: \(String(describing: response.result.error))")
            }
        }
    }

    @IBAction func verifyBtn(_ sender: Any) {
        let compare : [String : String] = ["id" : id , "fname" : fname , "lname" : lname]

        postData(url: verify_url , parameters : compare)
    }
}

Ответы [ 4 ]

0 голосов
/ 23 мая 2019

Вы использовали неверные данные для анализа.Вы можете попробовать это:

  if let status = response.response?.statusCode, let message = postJSON['msg'] {
                    switch(status) {
                    case 200:
                        self.msgHandler.text = ("Success: \(message)")
                    case 500:
                        self.msgHandler.text = ("Invalid: \(message)")
                    default:

                    }
                }

0 голосов
/ 23 мая 2019

Вам нужно изменить способ обработки вашего ответа. Я обновил ваш код, он должен работать.

import UIKit
import Alamofire
import SwiftyJSON

class VerifyAccount: UIViewController {

let verify_url = "http://192.168.43.222:3000/mobile/account_verification"

@IBOutlet weak var msgHandler: UITextView!

func postData(url: String ,  parameters: [String : String]) {
    Alamofire.request(url, method: .post, parameters: parameters).responseJSON {
        response in

 switch response.result {
        case .success:
            print("server response: \(response.value!)")


            do {
                if var json = try JSONSerialization.jsonObject(with: response.data!, options: [])  as? [String:Any] {


                    // Get value by key
                    var message = "";
                    if let msg = json["msg"] as? String
                    {
                        message = msg; // your message is here, you can do anything with it, whatever you want.
                    }

                    var status = 0;
                    if let st = json["status"] as? Int
                    {
                        status = st;
                    }


                }

            } catch let error as NSError {

            }



            break

        case .failure(let error):
            self.delegate.APIOnError(requestCode: requestCode);
            print("server error: \(error.localizedDescription)")

        }
    }
  }
0 голосов
/ 23 мая 2019

Разобрать данные вашего ответа как

guard data _ = response.result.value as? [String: Any] else {
     print("Error: \(String(describing: response.result.error))")
     return
}

let message = data["msg"] as? String ?? "Unable to parse message"
if let statusCode = data["status"] as? Int {
    switch statusCode {
        case 200: self.msgHandler.text = ("Success: \(message)")
        case 500: self.msgHandler.text = ("Invalid: \(message)")
        default:self.msgHandler.text = ("Invalid status code")
    }
}
0 голосов
/ 23 мая 2019

Вы можете получить значение безопасно (будь то String, Int и т. Д.) Из вашего JSON объекта следующим образом:

let status = postJSON["status"].int ?? 0
let message = postJSON["msg"].string ?? "No Message"

Двойной знак вопроса (??) дает возможность указать значение по умолчанию в случае, если при синтаксическом анализе не удается получить Int или String

...