swift firebase嵌套子字典删除

时间:2017-12-13 16:00:14

标签: swift firebase firebase-realtime-database nested

firebase structure

在firebase结构中,您可以看到我必须删除所有组中的特定用户(currentUserId):

这是我尝试做的事情:

###########################UPDATED###################################

 let groupsRef = self.root.child("groups")
groupsRef.observeSingleEvent(of: .value, with: { snapshot in
   
    for groupChild in snapshot.children {
        let groupSnap = groupChild as! DataSnapshot
        var dict = groupSnap.value as! [String: Any]
            let uid = dict["utenti"] as! [String: Bool]
        for each in uid {                
            if each.key == self.currentUserID{
                print(each.key)
               
      //i now need a way to remove this key:value

            }
            
            }
           
        
       
    }
   
})

我很新,所以我无法进一步提取ditcionary的每一个关键词,而不是我要删除的那个,如果它是相同的我将删除。 有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

你可以使用

for (key, value) in uid {


}

循环遍历字典。

但实际上,查看swift的官方文档会给你正确答案......

答案 1 :(得分:0)

    let groupsRef = self.root.child("groups")
            groupsRef.observeSingleEvent(of: .value, with: { snapshot in

                for groupChild in snapshot.children {
                    let groupSnap = groupChild as! DataSnapshot
                    for subGroupChild in groupSnap.children {
                        //Here you need to remove that specific user if condition match
                        //specificUserUID is that user's id that user to be deleted
                       if let snapref = subGroupSnap as! DatabaseReference {
                        snapref.queryOrdered(byChild: "utenti").queryEqual(toValue: specificUserUID).observe(.childAdded, with: { (snapshot) in

                        snapshot.removeValue(completionBlock: { (error, reference) in
                                if error != nil {
                                    print("There has been an error:\(error)")
                                 }
                         })
                        })
                       }
                    }
                }

            })

您的代码将如上所示,您只需要按用户ID找到用户并删除该特定快照。

答案 2 :(得分:0)

          let groupsRef = self.root.child("groups")
                    groupsRef.observeSingleEvent(of: .value, with: { snapshot in

                        for groupChild in snapshot.children {
                            let groupSnap = groupChild as! DataSnapshot
                            let groupKey = groupSnap.key
                            //added a groupKey to track the id of each group
                            var dict = groupSnap.value as! [String: Any]
                            var uid = dict["utenti"] as! [String: Bool]

                            //then for each key:value in uid check if is there a key = to currentuserID
                            for each in uid {

                                if each.key == self.currentUserID{
                                    uid.removeValue(forKey: each.key)
                                  //here you remove currentuserId from the dictionary and below 
                                 //finally you set back the new value of the dictionary without currentuserId

                   self.root.child("groups").child(groupKey).child("utenti").setValue(uid)

                                } 
                            }
                        }    
                    })