Снимок Firebase не показывает данные - PullRequest
0 голосов
/ 22 июня 2019

В основном все работает, кроме функции showChild, возвращающей завершение ([]) из-за сторожа catData = Category (снимок: catInfo).Мне интересно, почему охранник пусть возвращается в завершение.Когда я отлаживаю, catInfo имеет 1 значение, как показано на моем рисунке базы данных, и я хочу добавить catData.main к «cats».Ниже приведен код для метода обслуживания и модели категории.

База данных Firebase

static func showChild(completion: @escaping ([String]) -> Void) {
    let ref = Database.database().reference().child("category").child(User.current.uid)
    ref.observeSingleEvent(of: .value, with: { (snapshot) in
        guard let snapshot = snapshot.children.allObjects as? [DataSnapshot] else {
            return completion([])
        }

        var cats = [String]()

        for catInfo in snapshot {
            guard let catData = Category(snapshot: catInfo) else {
                return completion([])
            }
            cats += catData.main
        }
        completion(cats)
    })
}

import Foundation
import FirebaseDatabase.FIRDataSnapshot

class Category {

    var key: String?
    let main: [String]

    init?(snapshot: DataSnapshot) {
        guard !snapshot.key.isEmpty else {return nil}
        if let dict = snapshot.value as? [String : Any]{

            let main = dict["main"] as? [String]

            self.key = snapshot.key
            self.main = main ?? [""]
        }
        else{
            return nil
        }
    }
}

1 Ответ

0 голосов
/ 23 июня 2019

Проблема довольно проста.

Хотя ваш снимок содержит хотя бы один узел данных, он не находится в формате, понятном методу init категории.Вы перебираете его дочерние узлы, и на скриншоте есть только один, с ключом 'main'

Вы наблюдаете этот узел

fb_root
   category
      2ayHe...

и затем вы перебираетенад его дочерними узлами, которые будут

main
   0: Performance

, поэтому ключ 'main' и его значение '0: Performance'

, но ваш класс Category ищет дочерний узел 'main '

let main = dict["main"] as? [String]

Недостаточно информации, чтобы понять, что будет содержаться в остальной части структуры, поэтому я не могу сказать вам, как ее исправить, но, по крайней мере, вы знаете, в чем проблема.

Чтобы уточнить, эта строка

if let dict = snapshot.value as? [String : Any]

сделает dict = [0: "Производительность]

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