Ios 在tableViewCell上列出firebase子节点时删除值

Ios 在tableViewCell上列出firebase子节点时删除值,ios,swift,firebase,uitableview,firebase-realtime-database,Ios,Swift,Firebase,Uitableview,Firebase Realtime Database,我试图在表视图中列出firebase节点中的所有用户(此操作正常),但希望从列表中删除当前用户(此操作不正常) 我尝试过使用removeValue(),但它仍然与表视图上的当前用户一起运行-而且我不想从firebase中删除该用户 然后,我尝试使其仅在用户autoId不等于当前用户Id但仍显示在表视图单元格中时运行 如有任何帮助,将不胜感激:) 我的firebase结构如下所示: "users" : { "8x1SGi2P0KVOKm4i60JQLP1bdU63" : { "fu

我试图在表视图中列出firebase节点中的所有用户(此操作正常),但希望从列表中删除当前用户(此操作不正常)

我尝试过使用removeValue(),但它仍然与表视图上的当前用户一起运行-而且我不想从firebase中删除该用户

然后,我尝试使其仅在用户autoId不等于当前用户Id但仍显示在表视图单元格中时运行

如有任何帮助,将不胜感激:)

我的firebase结构如下所示:

"users" : {
   "8x1SGi2P0KVOKm4i60JQLP1bdU63" : {
     "fullname" : "bbbb",
     "profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/pinion-4896b.appspot.com/o/profile_image%2F8x1SGi2P0KVOKm4i60JQLP1bdU63?alt=media&token=7932b14f-c2d8-46fd-9dd1-c607217fe8d3",
   },
   "B7rwHiCTlphZjKXfPSEzkIwl8RH2" : {
     "fullname" : "Aaaa ",
     "profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/pinion-4896b.appspot.com/o/profile_image%2FB7rwHiCTlphZjKXfPSEzkIwl8RH2?alt=media&token=072e1f41-935e-430d-af99-dc640381f8e6",
   },
   "FRuuk20CHrhNlYIBmgN4TTz3Cxn1" : {
     "fullname" : "eeee",
     "profileImageUrl" : "https://firebasestorage.googleapis.com/v0/b/pinion-4896b.appspot.com/o/profile_image%2FFRuuk20CHrhNlYIBmgN4TTz3Cxn1?alt=media&token=bf89b903-a51a-4d6d-bdef-fe2667d78842",
   },
列出用户的代码:

func observeUsers(completion: @escaping (UserModel) -> Void) {
    REF_USERS.observeSingleEvent(of: .childAdded, with: { snapshot in
        if let dict = snapshot.value as? [String: Any] {
            let user = UserModel.transformUser(dict: dict, key: snapshot.key)

            //line below used first to remove value from listing on table view
            //Api.User.REF_USERS.child("users").child(Api.User.CURRENT_USER!.uid).removeValue()

            //line below - if user autoID is not equal to the current user then list
            if user.id != Api.User.CURRENT_USER?.uid {
                completion(user)
            }
        }
    })
}
编辑:


不要删除,而是尝试此选项 创建tabledata的模型 然后创建一个空数组 提取数据时,附加除具有相同currentuser.uid的数据以外的所有数据 然后重新加载tableview,这将显示除当前用户之外的所有数据

这是承诺的代码:

但这需要对数据库进行一些修改 使您的数据库如下所示 “用户”:{ “childbyautid”:{ “全名”:“全名”, “profileimageurl”:“您的url”, “userid”:“userid” }

那你就可以这样写了

var myArr = [String]()
Database.database().reference.child("users").observe(.value){(snapshot) in
if snapshot.childcount > 1 { self.myArr.removeAll()
for data in snapshot.children.allObjects as! [DataSnapshot]{
if let d = data.value as? [string: any]{
if Auth.auth.currentuser.uid != d["userid"]{
myArr.append(d["name"]}else{print("this is the user itself"}}}

不要删除,而是尝试此选项 创建tabledata的模型 然后创建一个空数组 提取数据时,附加除具有相同currentuser.uid的数据以外的所有数据 然后重新加载tableview,这将显示除当前用户之外的所有数据

这是承诺的代码:

但这需要对数据库进行一些修改 使您的数据库如下所示 “用户”:{ “childbyautid”:{ “全名”:“全名”, “profileimageurl”:“您的url”, “userid”:“userid” }

那你就可以这样写了

var myArr = [String]()
Database.database().reference.child("users").observe(.value){(snapshot) in
if snapshot.childcount > 1 { self.myArr.removeAll()
for data in snapshot.children.allObjects as! [DataSnapshot]{
if let d = data.value as? [string: any]{
if Auth.auth.currentuser.uid != d["userid"]{
myArr.append(d["name"]}else{print("this is the user itself"}}}

您可以在loadUsers中通过添加用户ID检查来控制这一点,如下所示

func loadUsers() {
var allUsers = [String]()
Api.User.REF_USERS.observe(.value, with: { snapshot in
    for child in snapshot.children { //build the array of keys
        let snap = child as! DataSnapshot
        let key = snap.key
if key != currentUser.id{
        allUsers.append(key)
}
        print(allUsers)
    }
})
}

您可以在loadUsers中通过添加用户ID检查来控制这一点,如下所示

func loadUsers() {
var allUsers = [String]()
Api.User.REF_USERS.observe(.value, with: { snapshot in
    for child in snapshot.children { //build the array of keys
        let snap = child as! DataSnapshot
        let key = snap.key
if key != currentUser.id{
        allUsers.append(key)
}
        print(allUsers)
    }
})
}

谢谢你的回复!我添加了一个编辑来显示如何创建一个数组并向其中添加所有用户-你知道如何阻止当前用户在追加其他用户时被追加吗?我假设你得到的密钥是你得到的用户ID,如下所示:在追加到数组之前,让x=Auth.Auth.currentuser.uid使用if-else块来检查key==x是否为continue,如果需要,不附加其他附加到数组中我可以明天给你代码谢谢你的回复!我添加了一个编辑来显示创建数组并将所有用户添加到数组中-你知道如何阻止当前用户在附加其他所有用户时被附加吗?我假设您得到的密钥是这样得到的userid让x=Auth.Auth.currentuser.uid在附加到数组之前使用if-else块检查key=x是否为continue,如果需要,请不要附加到数组中我可以明天给您代码