在子循环内使用子快照时遇到问题

时间:2018-12-19 18:56:38

标签: swift firebase firebase-realtime-database

我有一个具有“ post /(randID)”结构的Firebase数据库,还有从Item类继承的Post类。我已经编写了一个快照函数,该函数可以正确获取所有子节点的值,但是现在尝试仅对与我已经拥有的名称数组的元素匹配的post / children进行快照。

我正确地获取了值properly getting values,但没有在断点处将临时值正确附加到我的Item数组中。任何帮助将不胜感激

-----------代码-----------

func getWavePosts() {
    self.tempPosts = []

    for name in self.tempNames {
        var postRef = Database.database().reference().child("posts/\(name)")

        postRef.observe(.value, with: {snapshot in
            var test = snapshot.value as? [String:Any]
            var author = test!["author"] as? [String:Any]
            var uid = author!["uid"] as? String
            var username = author!["username"] as? String
            var photoURL = author!["photoURL"] as? String
            var url = URL(string: photoURL!)
            var imageURL = test!["imageURL"] as? String
            var text = test!["text"] as? String
            var timestamp = test!["timestamp"] as? Double
            var userProfile = UserProfile(uid: uid!, username: username!, photoURL: url!)
            var post = Post(id: name, author: userProfile, text: text!, timestamp: timestamp!, imageURL: imageURL!)
            self.tempPosts.append(post)

            //print(self.tempPosts)
            //self.items = self.tempPosts
        })
       //self.items = self.tempPosts
    }
    print(self.tempPosts.count)
    print(self.items.count)
}

1 个答案:

答案 0 :(得分:1)

首先,您的函数应将completion的{​​{1}}数组作为参数

Post

...现在让我们与func getWavePosts(_ completion: @escaping ([Post]) -> () ) 见面。

首先在foreach循环之前声明新的DispatchGroup。然后,在DispatchGroup observe之前输入postRef,然后将收到的dispatchGroup追加到数组(在函数中定义此数组,不要使用全局变量)之后,离开{{ 1}}。将每个Post添加到数组后,请在dispatchGroup结束时调用Post

completion

然后,当您调用此方法时,就可以在此方法的结尾处​​访问收到的帖子

dispatchGroup.notify(queue:)