我有以下函数来观察我的数据库的子节点的值:
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)
}
}
当我尝试将字典值分配给字符串并进行比较时,它不会分配它。但是,当我打印字典值时,值就在那里。
答案 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.
}
})