从Firebase中打印出一些孩子

时间:2018-07-14 23:29:07

标签: ios swift xcode firebase

我想显示Firebase的一些数据。我有一个节点,其中有一堆名为posts的帖子。

Database.database().reference().child("main").child("posts")

使用上述代码,我可以打印出posts节点中的所有文章。但是,我不想打印所有帖子,而是要打印一些帖子。 我想根据帖子ID打印一些帖子,如何打印多个帖子?

编辑

var postingID: String?
var posts = NSMutableArray()

  func loadDetails(){
    Database.database().reference().child("main").child("users").child(screenName!).child("bookmarks").observeSingleEvent(of: .value, with: { (snapshot:DataSnapshot) in


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


             for testingkey in postsDictionary.keys {
               Database.database().reference().child("main").child("posts").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snapshot) in

                    if snapshot.exists() {
                        for child in snapshot.children {
                            let snap = child as! DataSnapshot
                            if snap.hasChildren() {
                                if let id = snap.childSnapshot(forPath: "id").value as? String, id == testingkey {
                                    print(snap.value!)
                                    self.posts.insert(snap.value!, at: 0)
                                }
                            }
                        }
                    }

                     })
        }

        }})

}

1 个答案:

答案 0 :(得分:2)

编辑

您一直在这里设置相同的字符串

  

self.postingID = testingkey

因此它等于for循环中的最后一个元素。因此,在您的if条件下

  

id == self.postingID

仅适用于最后一个节点

也许您想在数组中更改self.postingID(如果ID尚未唯一,则更改为Set),并具有以下内容:

var self.postingIdArray = [String]()

然后在您的第一个函数中,您要将每个键附加到此数组中

for testingkey in postsDictionary.keys {

        self.postingID = testingkey

    }

最终,您想检查节点的ID是否在数组中,例如

if let id = snap.childSnapshot(forPath: "id").value as? String, self.postingIdArray.contains(id) { self.posts.insert(snap, at: 0) }

旧答案

let databaseRef = Database.database().reference().child("main")
let query = databaseRef.queryOrderedByKey()

query.observeSingleEvent(of: .value) { (snapshot) in
        if snapshot.exists() {
            for child in snapshot.children {
                let snap = child as! DataSnapshot
                if snap.hasChildren() {
                    if let id = snap.childSnapshot(forPath: "postId").value as? String, id == idToCompare {
                            print(id)
                    }
                }
            }
        }
    }