var test = String()
func fetchUser() {
let currentUserUid = Auth.auth().currentUser?.uid
Database.database().reference().child("users").child(currentUserUid!).child("test").observeSingleEvent(of: .value) { (snapshot) in
self.test = snapshot.value as! String
})
}
我想将快照值添加到变量中。
但是它崩溃了,尽管我的firebase概念是完美的并且适合代码。
可能是什么原因?
控制台结构:
我得到的错误:无法将类型'NSNull'(0x10dd86de0)的值强制转换为'NSString'(0x10b2485d8)。
此外,我想补充一点,我曾经将子名称从“ test”重命名为其他名称,此后不久便工作了。然后再次发生错误。
答案 0 :(得分:2)
问题代码中有很多错别字,但这是正确的。
最大的问题是可选对象的处理-当您应将它们视为可选对象以保护代码时,它们被强制展开。
所以这个
let currentUserUid = Auth.auth().currentUser?.uid
会更好
guard let user = Auth.auth().currentUser else {return}
let uid = user.uid
但是使用您的代码,这是一个更新,它从该节点以字符串形式读取值并打印出来。
var test = String()
func readUserString() {
let currentUserUid = "iBagi96IMGbd2k6wUtXjPs0gmNq1"
let usersRef = self.ref.child("users")
usersRef.child(currentUserUid).child("test").observeSingleEvent(of: .value, with: { snapshot in
let test = snapshot.value as! String
print(test) //prints "testValue"
})
}