Структурирование модели Firebase для разделов таблиц - PullRequest
0 голосов
/ 22 мая 2018

У меня есть структура данных в базе данных, которая я показываю эти данные в виде таблицы.Я получаю данные от Firebase.Разделы табличного представления жестко запрограммированы как Мотивация, Успех и т. Д. .Как лучше всего проанализировать эти данные, чтобы, когда я добавляю новый раздел в консоль Firebase, он добавлял этот раздел и данные для раздела в табличном представлении, без жесткого кодирования разделов?Любая помощь в правильном направлении была бы признательна, прочитайте документацию Firebase, но, кажется, не можете понять это.

Структура данных

    {
  "categories" : {
    "motivation" : {
      "one" : {
        "name" : "Bob",
        "title" : "Get up stand up"
      },
      "two" : {
        "name" : "Arsitotle",
        "title" : "Great philosopher"
      }
    },
    "success" : {
      "one" : {
        "name" : "Les",
        "title" : "You're great"
      },
      "three" : {
        "name" : "Bob",
        "title" : "One love"
      },
      "two" : {
        "name" : "Wayne",
        "title" : "You will be great"
      }
    }
  }
}

** Получениеданные **

ref.child("categories/motivation").observe(.childAdded, with: {(snapshot:DataSnapshot) in

            if let values = snapshot.value as? [String:String] {

                self.motivationDictionary.insert(values, at: 0)
            }
        })
    }


ref.child("categories/success").observe(.childAdded, with: {(snapshot:DataSnapshot) in

                if let values = snapshot.value as? [String:String] {

                    self.successDictionary.insert(values, at: 0)
                }
            })
        }

Я знаю, что это не лучший способ, но он работает.Вид избыточен, но я плохо знаком с базой данных и базой данных.

1 Ответ

0 голосов
/ 22 мая 2018

Таким образом, у вас есть фиксированное количество словарей, где у каждого словаря есть имя (motivationDictionary, successDictionary).

Вместо этого вы можете иметь словарь словарей (как в вашей структуре данных), так что верхнийсловарь содержит категории, и под каждым ключом у вас есть словарь значений для этой категории, то есть новый self.categories["motivation"] такой же, как старый self.motivationDictionary и т. д.

Это должно работать, но этоне лучшая практика, чтобы просто работать с необработанными словарями и строками.Этот подход может быть типичным для некоторых других языков (таких как Лиспс), но не для Swift.

В Swift вы должны определить классы вашей модели и проанализировать ваш DataSnapshot как экземпляры этих классов.Например, если вы начинаете с:

struct Item {
    let name: String
    let title: String
}

class Category {
    let name: String = ""
    var items: [String: Item] = [:]
}

class TableDataModel {
    var sections: [Category] = []
}

Затем внутри вашего observe вы можете заполнить вашу TableDataModel, а затем перезагрузить таблицу из модели.Таким образом, компилятор Swift поможет вам лучше убедиться, что ваша программа правильная, а код несколько понятнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...