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.
}
我已经检索到朋友的 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.
}