Как проверить, является ли значение словаря строкой или массивом - PullRequest
0 голосов
/ 18 октября 2018

У меня есть данные с сервера, такие как

[
  {
     "id": 1,
     "name": "16",
     "children": "",
     "products": [
                   {...},
                   {...}
                 ]
  },
  {
     "id": 2,
     "name": "17",
     "children": "",
     "products": [
                   {...},
                   {...}
                 ]
   }
]

, поэтому я сохраняю их как [[String: Any]], а Any потому, что в значениях могут быть Int, String или Dict,

Дело в том, что ключ "children" может быть NSConstantstring и может быть приведен к String, а также может быть NSArray и также может быть приведен к [[String: Any]].Поэтому мне нужно найти способ определить тип этого значения.Но все, что я пробовал, вызывало ошибку.

Как я могу это исправить?

UPD не так много кода)

внутри ответа alamofire:

        let data = responseJSON.result.value! as! [String: Any]
        let subCategory = data["children"] as! [[String: Any]]
        //check 

        for item in subCategory {
            print(type(of: item["children"]!))//__NSArrayI or __NSCFConstantString

        }

, если я попробую что-то вроде print(type(of: item["children"] as! String))он печатает String, если есть __NSCFConstantString, но если нет - вылетает с ошибкой Could not cast value of type '__NSArrayI' (0x10934fe48) to 'NSString' (0x1083e8568)

UPD 2 нет проблем с данными, все проанализировано и сохранено правильно, а также правильно распечатано

1 Ответ

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

Вы можете просто привести значение из словаря к нужному типу:

if let string = dictionary["children"] as? String {
    // Do something with string
} else if array = dictionary["children"] as? [Any] {
    // Do something with array
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...