我有一个帖子类,用于填充来自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?
提前致谢。
答案 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