无法使用Swift 5(iOS)从Firebase数据库中获取和打印单个值
目标:尝试将Firebase实时数据库中的值“email”打印到XCode 11控制台。请参阅提供的代码和JSON摘录 评论:这似乎是一个相当明显的问题,但是在尝试了一些建议之后,包括,和Firebase文档,我似乎仍然错过了一些东西 代码:无法使用Swift 5(iOS)从Firebase数据库中获取和打印单个值,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,目标:尝试将Firebase实时数据库中的值“email”打印到XCode 11控制台。请参阅提供的代码和JSON摘录 评论:这似乎是一个相当明显的问题,但是在尝试了一些建议之后,包括,和Firebase文档,我似乎仍然错过了一些东西 代码: func updateRiskValue() { var databaseReference: DatabaseReference! databaseReference = Database.database().reference()
func updateRiskValue() {
var databaseReference: DatabaseReference!
databaseReference = Database.database().reference()
let currentUser = Auth.auth().currentUser
databaseReference.child("users").child((currentUser?.uid)!).child("email").observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let valueRisk = value?["email"] as? String ?? ""
print(valueRisk)
}) {(error) in
print(error.localizedDescription)
}
}
@IBAction func riskSlider(_ sender: UISlider) {
updateRiskValue()
}
"users" : {
"ihhqjBDfIYeyl5QqsnFl1LVrXRG3" : {
"email" : "alexander@gmail.com",
"isCheckedCount" : 3,
"kycitems" : {
"Attach Government Documents" : {
"isChecked" : false
},
"Client Knowledge" : {
"isChecked" : true
},
"Contact Information" : {
"isChecked" : true
},
"PEP Check" : {
"isChecked" : true
},
"Risk Assessment" : {
"isChecked" : true
},
"Source of Wealth" : {
"isChecked" : true
},
"Transit Account Holders" : {
"isChecked" : true
},
"Transit Account Numbers" : {
"isChecked" : false
}
},
"password" : "123123",
"riskValue" : "1",
"todos" : {
"Hello" : {
"isChecked" : false
}
JSON摘录:
func updateRiskValue() {
var databaseReference: DatabaseReference!
databaseReference = Database.database().reference()
let currentUser = Auth.auth().currentUser
databaseReference.child("users").child((currentUser?.uid)!).child("email").observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
let valueRisk = value?["email"] as? String ?? ""
print(valueRisk)
}) {(error) in
print(error.localizedDescription)
}
}
@IBAction func riskSlider(_ sender: UISlider) {
updateRiskValue()
}
"users" : {
"ihhqjBDfIYeyl5QqsnFl1LVrXRG3" : {
"email" : "alexander@gmail.com",
"isCheckedCount" : 3,
"kycitems" : {
"Attach Government Documents" : {
"isChecked" : false
},
"Client Knowledge" : {
"isChecked" : true
},
"Contact Information" : {
"isChecked" : true
},
"PEP Check" : {
"isChecked" : true
},
"Risk Assessment" : {
"isChecked" : true
},
"Source of Wealth" : {
"isChecked" : true
},
"Transit Account Holders" : {
"isChecked" : true
},
"Transit Account Numbers" : {
"isChecked" : false
}
},
"password" : "123123",
"riskValue" : "1",
"todos" : {
"Hello" : {
"isChecked" : false
}
您正在向
/Users/$uid/email
添加一个观察者,因此您得到的快照只包含email
属性的值。然而,您将其视为字典,这就解释了为什么您的代码不起作用
要解决此问题,请从
databaseReference.child("users").child((currentUser?.uid)!).child("email").observeSingleEvent(of: .value, with: { (snapshot) in
let valueRisk = snapshot.value as? String
print(valueRisk)
}) {(error) in
print(error.localizedDescription)
}
谢谢你的建议!然而,当应用时,函数只返回“nil”。哎呀,代码片段中有一个类型,我仍然试图将它转换为字典。它现在正在转换为一个字符串,该字符串应该可以工作(如果该值存在)。