Проблема при печати ответа JSON на этикетке - PullRequest
0 голосов
/ 25 октября 2018

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

Alamofire.request(url, method: .get).responseJSON
{
    response in
    let result = response.result.value
    print(response)
    if result != nil{
        let data = result as! [String : AnyObject]


        let userdata = data["data"] as! NSDictionary

        let address = userdata["address"]
        let city = userdata["city"]
        let pincode = userdata["pincode"]
        let state = userdata["state"]
        self.lblAddress.text = city as? String
        self.lblCity.text = address as? String
        self.lblpincode.text = pincode as? String
        self.lblstate.text = state as? String
    }
}

, а вот мой ответ, который я получаю

SUCCESS: {
    "city_address" = 
    (
        {
            address = "404 palladium business hub.";
            city = Ahmedabad;
            pincode = 380061;
            state = Gujarat;
        }
    );
}

Нев состоянии понять, где я иду не так, пожалуйста, помогите мне решить эту проблему.

вывод для print(result)

{
    "city_address" =     (
                {
            address = "404 palladium business hub.";
            city = Ahmedabad;
            pincode = 380061;
            state = Gujarat;
        }
    );
}

1 Ответ

0 голосов
/ 25 октября 2018

Две проблемы:

  1. Объект, который содержит информацию об адресе, является значением для ключа city_address
  2. Этот объект является явно массивом (примечаниекруглые скобки)

И не используйте NSDictionary в Swift, а неопределенное значение JSON всегда равно Any.

if let result = response.result.value as? [String:Any], 
   let dataArray = result["city_address"] as? [[String : Any]], // maybe even `[[String:String]]`
   let userData = dataArray.first {
      let address = userData["address"]
      let city = userData["city"]
      let pincode = userData["pincode"]
      let state = userData["state"]
      DispatchQueue.main.async {
         self.lblAddress.text = address as? String
...
...