首页 > 解决方案 > 如何获取用户个人资料中的帖子?- 斯威夫特和火力基地

问题描述

试图将用户的帖子提取到他的个人资料中。我正在使用集合视图来显示数据,但没有显示任何内容。

这是我用来通过他们的 uid 获取用户帖子的函数。这是我的 Firebase 数据库

在此处输入图像描述

    //variables firebase
    var currentUser = Auth.auth().currentUser
    let databaseRef = Database.database().reference()
    let storage = Storage.storage().reference()

    //VARS
    var postsuser = [ProfileUserPosts]()


 func observeUserPosts() {

         let uid = Auth.auth().currentUser?.uid

        databaseRef.child("posts").queryOrdered(byChild: "timestamp").queryEqual(toValue: uid!).observe(.value) { (snapshot) in

            var tempPost = [ProfileUserPosts]()

            for child in snapshot.children {

                if let childSnapshot = child as? DataSnapshot {

                    let dict = childSnapshot.value as? [String: Any]
                    let address = dict!["address"] as? String
                    let breed = dict!["breed"] as? String
                    let phoneuser = dict!["phone"] as? String
                    let photoUrl = dict!["photoUrl"] as? String
                    let url = URL(string: photoUrl!)
                    let post = ProfileUserPosts(address: address!, breed: breed!, phone: phoneuser!, photoUrl: url!)
                    tempPost.insert(post, at: 0)

                }

                self.postsuser = tempPost
                self.postsCollectionView.reloadData()
            }
        }
    }

标签: swiftfirebasefetchpostsuser-profile

解决方案


看看 Firestore。你可能会发现它更好。无论如何,听起来您需要了解如何构建数据库。一旦你这样做了,获取/设置/更新/删除/查询是微不足道的。请参阅数据结构文档的最佳实践。

避免嵌套数据

由于 Firebase 实时数据库允许嵌套数据最多 32 层,您可能会认为这应该是默认结构。但是,当您在数据库中的某个位置获取数据时,您还会检索其所有子节点。此外,当您授予某人对数据库中某个节点的读取或写入访问权限时,您还授予他们对该节点下所有数据的访问权限。因此,在实践中,最好保持数据结构尽可能平坦。

扁平化数据结构

如果数据被拆分为单独的路径,也称为非规范化,则可以根据需要在单独的调用中有效地下载它。考虑这个扁平结构:

创建可扩展的数据

在构建应用程序时,通常最好下载列表的子集。如果列表包含数千条记录,这尤其常见。当这种关系是静态且单向的时,您可以简单地将子对象嵌套在父对象之下。

有时,这种关系更加动态,或者可能需要对这些数据进行非规范化。很多时候,您可以通过使用查询来检索数据的子集来对数据进行非规范化,如检索数据中所述。


推荐阅读