使用客户端阻止的用户上的swift过滤器从firebase字典中删除值
我的数据库结构是这样的使用客户端阻止的用户上的swift过滤器从firebase字典中删除值,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我的数据库结构是这样的 "blockByUser" : { "pcAkkvLY1TYseqk04sISUqop3Wt1" : { "7OYw2AtvZ7hxprFiX2e1LOn1DWs2" : true, "W4uaW1pOtkYUMh1jTJJVXQu0u6f1" : true } } "users" : { "Gn0SwQOmUvNkAFeg0YpGax75cpz2" : { "blocked" : { "pcAkkvLY1TYs
"blockByUser" : {
"pcAkkvLY1TYseqk04sISUqop3Wt1" : {
"7OYw2AtvZ7hxprFiX2e1LOn1DWs2" : true,
"W4uaW1pOtkYUMh1jTJJVXQu0u6f1" : true
}
}
"users" : {
"Gn0SwQOmUvNkAFeg0YpGax75cpz2" : {
"blocked" : {
"pcAkkvLY1TYseqk04sISUqop3Wt1" : true
},
"capacity" : "NO",
"country" : "Netherlands",
"email" : "katnl"
},
"iDlNUNNAsiN0JmO8bEdYAdANcn62" : {
"blocked" : {
"Gn0SwQOmUvNkAFeg0YpGax75cpz2" : true
},
"capacity" : "NO",
"country" : "Netherlands",
"email" : "dal"
},
"pcAkkvLY1TYseqk04sISUqop3Wt1" : {
"capacity" : "NO",
"country" : "Netherlands",
"email" : "test",
}
}
我现在必须在客户端进行筛选,从blockedByUser中删除密钥,因此我有两个字典,一个是“完整”用户列表,另一个是blockedByUsers,现在我在更新collectionView时遇到问题,因为firebase数据是异步的,我不确定如何使其像这样工作:
func fetchBlockedUsers() {
print("Fetching blocked users..")
let ref = FIRDatabase.database().reference().child("blockedByUser").child(currentUserUID)
ref.observe(.value, with: { (snapshot) in
guard let dictionaries = snapshot.value as? [String: Any] else { return }
self.users.removeAll()
let blocked = dictionaries
let ref = FIRDatabase.database().reference().child("users")
ref.observeSingleEvent(of: .value, with: { (snapshot) in
guard let dictionaries = snapshot.value as? [String: Any] else { return }
var dict = dictionaries
for block in blocked {
dict.removeValue(forKey: block.key)
}
dict.forEach({ (key, value) in
guard let userDictionary = value as? [String: Any] else { return }
let user = UserModel(uid: key, dictionary: userDictionary)
self.users.append(user)
})
self.collectionView?.reloadData()
}) { (err) in
print("Failed to fetch users for search:", err)
}
}) { (err) in
print("Failed to fetch users for search:", err)
}
}
但也许最好将数据扇出并使用firebase函数来管理数据 这很难理解。你能澄清这个问题和你想做什么吗?一个用户有能力在应用程序中阻止另一个用户,因此苹果希望被阻止的用户不再出现在该用户的用户列表中。@Jay试图找到一个好的解决方案来阻止某个用户的用户,以及如何将其存储在Firebase中并与Firebase一起,为应用程序中的每个新用户复制每个用户是否更好?如果阻止该用户从该用户的用户列表中删除该用户?或者在客户端执行?这里的目标是显示用户列表;被阻止的不会显示,被阻止的用户知道哪些用户阻止了它们?也就是说,将有三份清单。1) 用户2)阻止用户3)阻止此用户的用户?我认为您有最简单的解决方案。在每个用户节点中,保留用户已阻止的用户列表。当用户登录到应用程序时,首先读取该列表(这样应用程序将知道被阻止的用户),当应用程序迭代现有用户以加载它们时(通过.childAdded),如果正在加载的用户与被阻止用户列表中的用户匹配,则不要将它们添加到用户数组中。您也可以通过代码中的.value来实现。