Словарь меняет индексные позиции с помощью .keys - Swift - PullRequest
0 голосов
/ 08 октября 2018

В настоящее время я получаю данные из базы данных Firebase и сохраняю их в словаре.Когда я пытаюсь перечислить ключи в словаре следующим образом: snapDict?.keys индексы элементов не совпадают с указанными в базе данных.

Database.database().reference().child("\(UserData().mySchool!)/posts").observeSingleEvent(of: .value, with: { (snapshot) in
            print(snapshot.childrenCount)
            let snapDict = snapshot.value as? [String: Any]
            print(snapshot.value!)
            let names = snapDict?.keys
            print(names!)
            for id in names! {
                self.searchNames(id: id)
                self.tableView.reloadData()
            }
        })

Вот как элементы, которые будут в словаре, будут выглядеть в базе данных: enter image description here

Итак, выподумали бы, когда они помещены в словарь, они будут напечатаны как -LJRUC8n........-LOF6JUdm-onVuaq-zij?

snapDict?.keys

отпечатки:

["-LOBSAv_l5_x1xnKwx3_", "-LJRUC8nPF3Vg-DDGiYQ", "-LOBLXpTs39yLZo6EnHl", "-LOF6JUdm-onVuaq-zij", "-LODhXPQi8G7MX1bSfeb", "-LJaUiEnGOcBjKsTWSCS", "-LOBLZzrLAlzkhoidnKf"]

Я не могу понять порядок / образец здесь.По алфавиту?Любые идеи, почему заказ получается таким образом?

1 Ответ

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

Ключи в словаре по определению неупорядочены.Поэтому при преобразовании снимка в словарь любая информация о порядке узлов теряется.

Кроме того, вы не указываете порядок перед чтением данных.

Чтобы исправить оба:

Database.database().reference()
  .child("\(UserData().mySchool!)/posts")
  .queryOrderedByKey()
  .observeSingleEvent(of: .value, with: { (snapshot) in
      print(snapshot.childrenCount)
      for child in snapshot.children.allObjects as! [FIRDataSnapshot] {
          print(child.value)     
      }
  })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...