【发布时间】:2019-11-09 21:52:04
【问题描述】:
我有一段代码可以从我的 Firebase 数据库中提取所有帖子。我正在尝试让代码拉取特定用户 ID 的所有帖子。我的数据库的结构是用户 ID 有一组与之关联的帖子 ID。
我必须拉出所有帖子的代码:
DataService.ds.REF_POSTS.observe(.value, with: { (snapshot) in
self.posts = []
if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
for snap in snapshot {
print("SNAP: \(snap)")
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Post(postKey: key, postData: postDict)
self.posts.append(post)
}
}
}
self.feedTableView.reloadData()
})
我如何识别当前用户:
_ = Auth.auth().addStateDidChangeListener { (auth,user) in
if let user = user {
let userId = user.uid
print("USER: \(String(describing: userId))")
let newPost = DataService.ds.REF_USERS.child("\(userId)").child("posts")
//print("NEW POST: \(newPost.child)")
newPost.setValue([userPost : true])
}
}
看起来我需要访问用户对象的子(帖子),然后循环浏览帖子。如何循环浏览(并观察更改)与已登录用户关联的帖子?
编辑(尝试循环浏览用户的所有帖子):
_ = Auth.auth().addStateDidChangeListener { (auth,user) in
if let user = user {
let userId = user.uid
print("USER: \(String(describing: userId))")
let newPost = DataService.ds.REF_USERS.child("\(userId)").child("posts")
newPost.observe(.value, with: { (snapshot) in
self.posts = []
if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
for snap in snapshot {
print("ERIC SNAP: \(String(describing: snap.value))")
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Post(postKey: key, postData: postDict)
self.posts.append(post)
}
}
}
self.feedTableView.reloadData()
})
//print("NEW POST: \(newPost)")
}
}
【问题讨论】:
-
您需要为每个帖子附加一个侦听器,在该用户节点下您有一个密钥。
-
@FrankvanPuffelen 我在上面添加了一个编辑。这是你推荐的吗?有些东西似乎仍然不对劲,因为我打印
ERIC SNAP时得到的值是ERIC SNAP: Optional(1)
标签: swift firebase firebase-realtime-database