如何在数组中获取.child键?

时间:2017-08-20 16:09:26

标签: swift firebase

我想将我所有被阻止的用户子项保存为我的代码中的字符串。但听起来很简单,我无法弄明白。

static func block(myself: String, posterUID:  String){
    var blockedUserRef = Database.database().reference().child("users").child(myself).child("blockedUsers").child(posterUID)
    blockedUserRef.setValue(true)

    var blokedArray:[String] = []
    var handle:DatabaseHandle!

    blockedUserRef = Database.database().reference()
    handle = blockedUserRef.child("blockedUsers").observe(.childAdded, with:{ (DataSnapshot) in
        if let item = DataSnapshot.value as? String{
            blokedArray.append(item)
        }
    })



}

我想让我的被阻止用户的数组进入for循环并从显示中过滤掉它们。

ref.observeSingleEvent(of: .value, with: { (snapshot) in
        guard let snapshot = snapshot.children.allObjects as? [DataSnapshot]
            else { return completion([]) }

        // 3 filter the user from the array
        let users =
            snapshot
                .flatMap(User.init)
                .filter { $0.uid != currentUser.uid }

这是我的火力基地:

 "users" : {
    "3YLVUDA8YnSuVYUTxv6cvOQPSjm1" : {
       "username" : ""
    },
    "4duY2hhTv5S7sSXtZYBfiP7JBLz1" : {
      "username" : "Love from NYC"
    },
    "58t0M2Fxxhg6GRT96vVbKMFHRKO2" : {
      "blockedUsers" : {
        "4duY2hhTv5S7sSXtZYBfiP7JBLz1" : true,
        "SqarOdPJUydcdV6deXTeIdzkarE2" : true
      },
      "username" : "IStandWithYou"
    },

我尝试的一些新方法我调试了它,它似乎没有将它保存到数组

     ///adedblock
        var blockedUserRef = Database.database().reference().child("users").child(currentUser.uid).child("blockedUsers")


        var blokedArray:[String] = []
        var handle:DatabaseHandle!

        blockedUserRef = Database.database().reference()
        handle = blockedUserRef.child("blockedUsers").observe(.childAdded, with:{ (DataSnapshot) in
            if let item = DataSnapshot.value as? String{
                blokedArray.append(item)
            }
        })

        for user in blokedArray{
            let users =
                snapshot
                    .flatMap(User.init)
                    .filter { $0.uid != user }
        }

1 个答案:

答案 0 :(得分:0)

这可以通过将blockedUsers的所有子条目保存到一个包含所有字符串的数组来完成。

为此,首先要创建一个像

这样的空数组
myList:[string] = []

然后,您需要创建对Firebase数据库的引用,如:

var ref: DatabaseReference!

您还需要一个数据库句柄来浏览数据库:

var handle:DatabaseHandle!

现在,您需要转到ViewDidLoad函数并添加如下代码:

ref = Database.database().reference()
    handle = ref?.child("blockedUsers").observe(.childAdded, with:{ (DataSnapshot) in
        if let item = DataSnapshot.value as? String{
            self.myList.append(item)
        }
    })

这段代码正在检查一个条目是否被添加到子数据库" blockedUsers",并且从中,它正在添加刚刚输入到阵列中的任何内容。

现在,你有一个数组填充了子数据库中的所有内容,blockedUsers。您现在可以在UITableView中使用该数组,或将其列在标签中。

希望这有帮助!