Как получить доступ к вложенным данным NSDictionary из FireBase

#arrays #swift #firebase #firebase-realtime-database #nsdictionary

# #массивы #swift #firebase #firebase-база данных в реальном времени #nsdictionary

Вопрос:

Я запускаю программу Xcode 8 / Swift 3, извлекающую данные из базы данных firebase. Я добавляю «Бренды» в деталь «Магазин».

Вот как выглядят данные:

Скриншот NSDictionary

Я могу получить доступ ко всем «корневым» данным, таким как местоположение и магистраль, используя следующий код.

 let storeName = value["StoreName"] as! String
let subThouroughfare = value["subThouroughfare"] as! String
let thouroughfare = value["Thouroughfare"] as! String
let administrativeArea = value["administrativeArea"] as! String
 

Я не уверен, как получить доступ к встроенным данным, и в конечном итоге будет более одного «фирменного» ключа с 4 значениями, структурированными как таковые:

 $StoreKey:
    brands:
        $brandKey1:
            Value1: String
            Value2: String
            Value3: String
            Value4: String
        $brandKey2:
            Value1: String
            etc...
 

Пока что у меня есть настройка структуры следующим образом, и мне нужно будет запросить бренд из части бренда таблицы:

 var ProductList = [storeStruct]()
struct BrandStruct{
    let BrandKey: String
    let BrandName: String
    let Value1: String
    let Value2: String
    let Value3: String
    let Value4: String
}
 

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

Спасибо за помощь!

Комментарии:

1. Я не уверен, как глубже погрузиться в словарь. Прямо сейчас я извлекаю данные из первого уровня словаря, но я не уверен, как получить ключ и значения бренда.

2. Реструктурируйте и переформулируйте свой вопрос в соответствии с вашим фактическим запросом, ваш вопрос неясен, удалите ненужные детали и включите вашу фактическую структуру JSON

3. Хорошо, я думаю, я понял вопрос. Посмотрите, полезен ли вам мой ответ.

Ответ №1:

Начните с выборки let brands = value["brands"] as! NSDictionary , полностью параллельной тому, что вы уже делаете. Теперь запросите brands.allKeys ; это массив ключей бренда. Затем для каждого ключа вы можете запросить brands[thisKey] as! NSDictionary , и вы получите обратно словарь, содержащий четыре значения с ключами "Val1" , "Val2" , "Val3" , и "Val4" . (Опять же, если имена и количество этих ключей могут меняться, allKeys я расскажу вам, что это такое.)

Комментарии:

1. Хорошо, я вижу, к чему вы клоните, и, похоже, я добиваюсь прогресса. Спасибо за вашу помощь. Как только я закончу программирование своего блока, я дам вам знать.

2. Отлично, спасибо. Я старался сделать это как можно проще; в реальной жизни я бы использовал [String:Any] вместо NSDictionary , а затем использовал keys бы для получения ключей, но в данном случае это не имеет большого значения.

3. Это сработало. Я смог извлечь все значения и добавить их в массив. Спасибо.