首页 > 解决方案 > 从数据库读取时发现 nil

问题描述

尝试从 Firebase 读取时,我得到

致命错误:在展开可选值时意外发现 nil

读取数据库的代码:

ref = Database.database().reference().child("userDatabases").child(userID!).child("-Lk__eup2Z7WR-iqtXkI").child("-Lk__gmhOTWfVzEPVo2t")    

    ref?.observeSingleEvent(of: .value, with: { (snapshot) in
                for child in snapshot.children.allObjects as! [DataSnapshot] {

                  let dict = child.value as? [String : AnyObject] ?? [:]

                    self.objectProducer.append(dict["objectProducer"] as! String)
                    self.objectType.append(dict["objectType"] as! String)
                    self.objectAmount.append(dict["amount"] as! String)
                    self.objectMeasureUnit.append(dict["unit"] as! String)
                }
            })

例如,如果我尝试打印:print(dict["objectProducer"])我得到正确的结果。

我试图从中读取的 FirebaseStructure 如下所示:

 "-Lk__eup2Z7WR-iqtXkI" : {
          "-Lk__gmhOTWfVzEPVo2t" : {
            "5740700998485" : {
              "amount" : "330",
              "objectProducer" : "Coca Cola",
              "objectType" : "Zero",
              "unit" : "Milliliter"
            },
            "createdOn" : "24-7-2019 at: 22:5:35",
            "listID" : "-Lk__gmhOTWfVzEPVo2t",
            "name" : "Test"
          },    

这里出了什么问题?

标签: swiftfirebasefirebase-realtime-database

解决方案


在我看来,改变这行代码

let dict = child.value as? [String : AnyObject] ?? [:]

至:

guard let dict = child.value as? [String: AnyObject] else { return }

那么你就不会出错了。

跳这个帮助。


推荐阅读