如何从Firebase调用自定义类函数中的数据

时间:2016-10-21 16:46:28

标签: ios swift firebase firebase-realtime-database

我有一个帖子类,用于填充来自Firebase的帖子数据的集合视图。
我无法获取一些用户数据,因此我尝试将观察者放入帖子类。
这似乎工作正常,但从Firebase获取数据有一点延迟,所以它似乎在firebase调用完成之前完成init()函数。

这是一个职位:

class Post {

    var _comment1Text: String?
    var _comment1User: String?
    var _comment1Name: String?

    init(comment1Text: String, comment1User: String, comment1Name: String) {

        self._comment1Text = comment1Text
        self._comment1User = comment1User
        self._comment1Name = comment1Name

        if self._comment1User != "" {
            DataService.ds.REF_USERS.child(self._comment1User!).observeSingleEventOfType(.Value, withBlock: { userDictionary in
                let userDict = userDictionary.value as! NSDictionary
                self._comment1Name = userDict.objectForKey("username") as? String
            })
        }
        print(self._comment1Text)
        print(self._comment1Name)
    }
}

如果我在firebase调用中打印,它可以正常工作。
但是,如果我在它之后打印,由于某种原因,comment1name还没有填写。

有没有办法获得self._comment1Name包含来自Firebase的数据及时填充collectionView?

提前致谢。

1 个答案:

答案 0 :(得分:2)

DataService.ds.REF_USERS.child(self._comment1User!).observeSingleEventOfType(.Value

是一个异步调用,因此访问completionBlock中的print函数,你必须在completionBlock中更新你的collectionView。

 DataService.ds.REF_USERS.child(self._comment1User!).observeSingleEventOfType(.Value, withBlock: { userDictionary in
            let userDict = userDictionary.value as! NSDictionary
            self._comment1Name = userDict.objectForKey("username") as? String

                print(self._comment1Text)
                print(self._comment1Name) 
                // Update your collectionView      
        })

异步调用被加载到不同的网络线程中,因此从服务器检索数据库需要一些时间。

如果您正在寻找自定义类与viewController之间的通信,请查看我的答案: - https://stackoverflow.com/a/40160637/6297658