无法获得firebase子节点

时间:2017-10-06 09:10:39

标签: swift firebase

你好,我是最新的。我正在使用具有2层层次结构的firebase数据库以及每个节点的许多子节点。我得到第一层(描述,结束数据和其他),但我不能得到新闻节点。是3到5个随机密钥。我播下了许多问题但仍然没有问题。

我明白我做错了但是什么?

Firebase是:

enter image description here

我需要撤退新闻儿童

struct is

struct ICONews {
    let ICOId: String
    let news1: String
    let news2: String
    let news3: String
    init?(ICOId: String, dict: [String: Any] ) {
        self.ICOId=ICOId
        guard let news1 = dict[""] as? String,
        let news2 = dict[""] as? String,
        let news3 = dict[""] as? String
         else { return nil }
        self.news1 = news1
        self.news2 = news2
        self.news3 = news3
    }
}

struct NewsSnapShot {
    let posts: [ICONews]
        init?(with snapshot: DataSnapshot) {
         var posts = [ICONews] ()
            guard let snapDict = snapshot.value as? [String: [String: Any]] else { return nil }
            for snap in snapDict {
                guard let post = ICONews (ICOId: snap.key, dict: snap.value) else {continue}
                posts.append(post)
            }
            self.posts=posts
    }
}

DataBase类

class DatabaseService {
    static let shared = DatabaseService()
    private init(){}
    let ICOReference = Database.database().reference()
}

和撤退方法

DatabaseService.shared.ICOReference.child("news").observe(DataEventType.value, with: { (snapshot) in
    guard let postsSnapShot = ICOSnapShot(with: snapshot) else {return}    
})

2 个答案:

答案 0 :(得分:1)

完成

Database.database().reference().observeSingleEvent(of: .value, with: {(snapshot) in
let enumerator = snapshot.children
while let rest = enumerator.nextObject() as? DataSnapshot {
    let values = (rest as! DataSnapshot).value as? NSDictionary
        let enumeratorMap1 = (rest as! DataSnapshot).children
        while let rest2 = enumeratorMap1.nextObject() as? DataSnapshot {
            let valuesMap1 = (rest2 as! DataSnapshot).value as? NSDictionary
            if (rest2 as! DataSnapshot).key == "news" {
                print(rest2.value)
            }
        }
    }
})

答案 1 :(得分:0)

一样进行Firebase Api调用
Database.database().reference().child("users").child(userID).observe(.childAdded, with: { (snapshot) in
                if snapshot.exists() {
                    let receivedMessage = snapshot.value as! [String: Any]

                    let name = receivedMessage["name"] as? String ?? ""
                    let id = receivedMessage["id"] as? Double ?? 0.0
                    let profileurl = receivedMessage["url"] as? String ?? ""

                    completion(User(name: name, id: id, url: url))
                } else {
                    failure()
                }
})