Firebase 如何获取好友信息

Firebase How to get friends info

我已经检索到朋友的 UID,观察他们的姓名、照片等信息的最佳方式是什么? 现在 UidArray 持有朋友的 uid,我应该循环每个 uid 以在 Tableview 上显示他们的信息吗?

let userIdArray = self.UidArray
for id in userIdArray {
    ref.observeSingleEvent(of: .value, with: { (snapshot) in
        guard let dictionary = snapshot.value as? [String: Any] else {
            return
        }
        let displayN = dictionary["displayname"] as? String
        let Uid = dictionary["uid"] as? String
        let ImgUrl = dictionary["urlToImage"] as? String

// Append results to another array, reload table view if loop is done.

用户模型:

class Userr: NSObject {
    var displayname: String?
    var email: String?
    var gender: String?
    var uid: String?
    var urlToImage: String?
}

我只想获取一次数据。我不想每次通过滚动显示单元格时都访问数据库。

我想知道根据朋友的 uid 数组获取朋友信息的最佳方法是什么?

for 循环不是必需的,因为在 Firebase 的 observe 方法中使用的 .childAdded 会像 for 循环一样调用该函数的次数与用户一样多。

 func handleFetchAllUsers(_ completion: @escaping ([User]) -> ()) {
        DispatchQueue.global(qos: .userInteractive).async {

    var data: [User] = []

    let reference = Database.database().reference().child("users")

        reference.observe(.childAdded, with: { (snapshot) in

            guard let dictionary = snapshot.value as? [String: AnyObject] else { return }

                    let username = dictionary["username"] as? String
                    let name = dictionary["name"] as? String
                    let email = dictionary["email"] as? String

                    let user = User()
                    user.name = name
                    user.username = username
                    user.email = email

                    data.append(user)
                    DispatchQueue.main.async {
                        completion(data)
                    }

            }, withCancel: nil)

        }, withCancel: nil)
    }
}

您可以这样调用该函数:

var users: [User] = []

handleFetchAllUsers { (user) in // USER IS THE ARRAY OF USERS RETURNED FROM THE FUNCTION
    self.users = user
    self.collectionView.reloadData() // IF YOU'RE USING A UICOLLECTIONVIEW.
}