使用Firebase和Swift获取与特定用户关联的帖子
我有一段代码,可以从Firebase数据库中提取所有帖子。我试图让代码为特定的用户id提取所有帖子。我数据库的结构是,用户id有一组与之关联的帖子id 我必须提取所有帖子的代码:使用Firebase和Swift获取与特定用户关联的帖子,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我有一段代码,可以从Firebase数据库中提取所有帖子。我试图让代码为特定的用户id提取所有帖子。我数据库的结构是,用户id有一组与之关联的帖子id 我必须提取所有帖子的代码: DataService.ds.REF_POSTS.observe(.value, with: { (snapshot) in self.posts = [] if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
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()
})
看起来我需要访问users对象的子对象(posts),然后循环浏览posts。如何循环浏览(并观察更改)与登录用户关联的帖子
编辑(尝试循环浏览用户的所有帖子):
\=Auth.Auth().addStateDidChangeListener{(Auth,用户)在
如果let user=user{
让userId=user.uid
打印(“用户:\(字符串(描述:userId))”)
让newPost=DataService.ds.REF\u USERS.child(“\(userId)”).child(“posts”)
newPost.observe(.value,其中:{(快照)位于
self.posts=[]
如果让snapshot=snapshot.children.allObjects为?[DataSnapshot]{
用于管理单元快照{
打印(“ERIC SNAP:\(字符串(描述:SNAP.value)))
如果让postDict=snap.value作为字典{
让key=snap.key
让post=post(postKey:key,postData:postDict)
self.posts.append(post)
}
}
}
self.feedTableView.reloadData()
})
//打印(“新帖子:\(新帖子)”)
}
}
获取登录用户帖子的方法如下:
guard let uid = Auth.auth().currentUser?.uid else {
return
}
print("USER ID: \(uid)")
let newPost = DataService.ds.REF_USERS.child("\(uid)").child("posts")
newPost.observe(.value, with: { (snapshot) in
self.posts = []
if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
for snap in snapshot {
let postData = DataService.ds.REF_POSTS.child(snap.key)
postData.observe(.value, with: { (snapshot) in
if let postDict = snapshot.value as? Dictionary<String, AnyObject> {
let key = snapshot.key
let post = Post(postKey: key, postData: postDict)
self.posts.append(post)
}
self.feedTableView.reloadData()
})
}
}
})
guard let uid=Auth.Auth().currentUser?.uid else{
返回
}
打印(“用户ID:\(uid)”)
让newPost=DataService.ds.REF\u USERS.child(\(uid)”).child(“posts”)
newPost.observe(.value,其中:{(快照)位于
self.posts=[]
如果让snapshot=snapshot.children.allObjects为?[DataSnapshot]{
用于管理单元快照{
让postData=DataService.ds.REF\u POSTS.child(snap.key)
postData.observe(.value,其中:{(快照)位于
如果让postDict=snapshot.value作为字典{
让key=snapshot.key
让post=post(postKey:key,postData:postDict)
self.posts.append(post)
}
self.feedTableView.reloadData()
})
}
}
})
获取登录用户帖子的方法如下:
guard let uid = Auth.auth().currentUser?.uid else {
return
}
print("USER ID: \(uid)")
let newPost = DataService.ds.REF_USERS.child("\(uid)").child("posts")
newPost.observe(.value, with: { (snapshot) in
self.posts = []
if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
for snap in snapshot {
let postData = DataService.ds.REF_POSTS.child(snap.key)
postData.observe(.value, with: { (snapshot) in
if let postDict = snapshot.value as? Dictionary<String, AnyObject> {
let key = snapshot.key
let post = Post(postKey: key, postData: postDict)
self.posts.append(post)
}
self.feedTableView.reloadData()
})
}
}
})
guard let uid=Auth.Auth().currentUser?.uid else{
返回
}
打印(“用户ID:\(uid)”)
让newPost=DataService.ds.REF\u USERS.child(\(uid)”).child(“posts”)
newPost.observe(.value,其中:{(快照)位于
self.posts=[]
如果让snapshot=snapshot.children.allObjects为?[DataSnapshot]{
用于管理单元快照{
让postData=DataService.ds.REF\u POSTS.child(snap.key)
postData.observe(.value,其中:{(快照)位于
如果让postDict=snapshot.value作为字典{
让key=snapshot.key
让post=post(postKey:key,postData:postDict)
self.posts.append(post)
}
self.feedTableView.reloadData()
})
}
}
})
您需要在每个帖子上附加一个侦听器,在该用户节点下有一个键。@FrankvanPuffelen我在上面添加了一个编辑。这是你推荐的吗?有些东西似乎仍然不对劲,因为我在打印ERIC SNAP
时得到的值是ERIC SNAP:Optional(1)
您需要在每个帖子上附加一个侦听器,您在该用户节点下有一个键。@FrankvanPuffelen我在上面添加了一个编辑。这是你推荐的吗?有些东西似乎仍然不正确,因为我在打印ERIC SNAP
时得到的值是ERIC SNAP:Optional(1)
guard let uid = Auth.auth().currentUser?.uid else {
return
}
print("USER ID: \(uid)")
let newPost = DataService.ds.REF_USERS.child("\(uid)").child("posts")
newPost.observe(.value, with: { (snapshot) in
self.posts = []
if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
for snap in snapshot {
let postData = DataService.ds.REF_POSTS.child(snap.key)
postData.observe(.value, with: { (snapshot) in
if let postDict = snapshot.value as? Dictionary<String, AnyObject> {
let key = snapshot.key
let post = Post(postKey: key, postData: postDict)
self.posts.append(post)
}
self.feedTableView.reloadData()
})
}
}
})