如何从Firebase数据库中调用帖子ID

时间:2017-02-15 00:18:02

标签: ios swift uitableview firebase firebase-realtime-database

我想做的是致电某个帖子ID:

Image

取决于在UITableView上点击的单元格,并在不同的ViewController上显示来自它的数据。目前,每个帖子都有不同的ID以及上面照片中显示的数据

我见过这种方法用于根据ID调用用户名:

let uid = FIRAuth.auth()?.currentUser?.uid
        FIRDatabase.database().reference().child("users").child(uid!).observeSingleEvent(of: .value, with: { (snapshot) in
            if let dictionary = snapshot.value as? [String: AnyObject] {
                self.userLabel.text = dictionary["username"] as? String
            }
        })

这可以通过上面的屏幕截图中显示的帖子ID来实现吗?如果是这样,最简单的方法是什么?

2 个答案:

答案 0 :(得分:2)

好的,我简化了代码,因此我可以更容易地解释它。

首先在名为postID的方法之外创建一个变量,并将其设置为FIRDatabase.database()。reference()。childByAutoID()

let postID = UUID().uuidString

然后在你的postObject中添加另一个set并设置你之前声明的变量"postID": postID

let postObject: Dictionary<String, Any> = [
                                                "uid": uid,
                                                "title": title,
                                                "price": price,
                                                "rating": rating,
                                                "description": description,
                                                "username" : username,
                                                "image": self.imageFileName,
                                                "postID": self.postID
                                            ]

最后替换FIRDatabase.database().reference().child("posts").childByAutoID().setValue(postObject)

FIRDatabase.database().reference().child("posts").child(self.postID).setValue(postObject)

答案 1 :(得分:0)

我遇到了与您相似的情况。您可以执行此操作的另一种方法是通过字典键获取postID。

此示例将获取所有postID,但这只是一个起点。

            let json = JSON(value)
                let keys = value.keys
                for element in keys {
                    var postID = ""
                    for key in keys {
                        if element == key {
                            postID = key
                        }
                    }