1
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 概念是完美的并且适合代码。

可能是什么原因?

控制台结构:

  • 用户
    • iBagi96IMGbd2k6wUtXjPs0gmNq1。<--- currentUserUid
      • 测试:测试值

我得到的错误:无法将类型“NSNull”(0x10dd86de0)的值转换为“NSString”(0x10b2485d8)。

另外我想补充一点,我曾经将孩子的名字从“test”重命名为其他东西,然后它工作了很短的时间。比错误再次发生。

4

1 回答 1

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"
    })
}
于 2018-12-05T19:57:55.723 回答