无法分配从FIRDatabase

时间:2016-09-26 18:03:47

标签: ios dictionary firebase firebase-realtime-database

我有以下函数来观察我的数据库的子节点的值:

 func findUser() {

    let tempUser = "jordan"

    let firRef = FIRDatabase.database().reference()

    let userRef = firRef.child("user-referances")

    var username:String?

    userRef.observe(.value, with: { (snapshot) in

        if let dictionary = snapshot.value as? [String:AnyObject] {
            print(snapshot)

            print(dictionary)
            username = dictionary["username"] as? String
            //print("usernam)
            if username == tempUser {
                print("username exists")

                print(username)
                //return

            }else {
                print("username not found")
            }
        }

        }) { (error) in
            print(error)
    }
}

当我尝试将字典值分配给字符串并进行比较时,它不会分配它。但是,当我打印字典值时,值就在那里。

console screenshot

2 个答案:

答案 0 :(得分:0)

我不知道iOS开发,但是当我查看你的控制台截图时,看看你的代码,我想我可能会看到错误。

您使用print(dictonary)并获得:

["kszzbjya8HY1IsV1Iek02FKFxtj1": {
    username = max;
}, "QW3V9o08zuele3BkfmPCM33m4K52": {
    username = jordan;
}]

这意味着变量字典等于整个数据块。

然而,你试着说:

username = dictionary["username"] as? String

您是否必须先让每个孩子,并单独检查它的用户名?

同样,我对iOS或swift一无所知,所以如果我离开这里,请告诉我。但除非你将值赋给用户名的那一行是某种Swift方式自动迭代快照的子代,我认为这可能是你的问题。

答案 1 :(得分:0)

据我了解您的代码,您正在检查用户名是否已存在。使用它来查找用户名,而不是遍历所有用户名。

userRef.child("user-referances").queryOrdered(byChild: "username").queryEqual(toValue: "tempUser").observeSingleEvent(of: .value, with: {(snap) in


        if let snapDict = snap.value as? [String:AnyObject] {

            for each in snapDict{

                let stringName = each.value["username"] as! String
                print("username for :\(each.key) is : \(stringName)")
            }

        }else{

            //That username doesnt exists.

        }

    })

检查: - Firebase : If username already exists.