Как манипулировать вложенными словарями в Swift, например. Данные JSON?

Я использую NSJSONSerialization для анализа JSON в приложении Swift. Однако возвращаемый словарь состоит из сложной, глубоко вложенной структуры, что делает невозможным иметь очень длинные объявления типов (например, Dictionary<String, Array<Dictionary<String, ....>>).

Есть ли хороший способ работы с такой структурой в Swift, где структура коллекции очень сложна и ее типы неизвестны до времени выполнения?

Ответы

Ответ 1

Просто возьмите ссылку на свои данные json как NSDictionary:

var dict: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

то вы можете ссылаться на него с помощью индексов:

var myValue: NSString = dict["level1"]["level2"]

Ответ 2

myDictionary["accounts"] может быть необязательным. Попробуйте: myDictionary["accounts"]?["active"]?

Ответ 3

В Obj-C мы могли бы написать

cityName = myDictionary[@"photos"][@"region"][@"city"]

Как показало несколько здесь, вышеприведенное не применяется в Swift, по крайней мере, это никогда не имеет для меня.

Вот как вы это делаете в Swift для доступа к трем индексам в NSDictionary для строки,

let cityName = ((myDictionary!["photos"] as NSDictionary)["region"]! as NSDictionary)["city"]! as String`

Надеюсь, что в следующем обновлении Swift все это можно свести к тому, что у нас было в Obj-C.