swift - 从数据库读取时发现 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"
},
这里出了什么问题?
解决方案
在我看来,改变这行代码
let dict = child.value as? [String : AnyObject] ?? [:]
至:
guard let dict = child.value as? [String: AnyObject] else { return }
那么你就不会出错了。
跳这个帮助。
推荐阅读
- javascript - 带有内部 JavaScript 的 HTML 页面未在移动 Safari 中打开
- swift - SwiftUI,在文本字段上使用 textContentType 会导致延迟运行 14.4.1
- php - 查找数组中的所有后代
- java - 是否有可能有一个将特定依赖项子集嵌入到 jar 中的“java_binary”目标?
- r - 如何制作具有连续变量和分类变量的系统发育树
- file-upload - 如何找到我为 Google Cloud Storage 上传的文件的本地路径
- node.js - 已解决: find({user: {user: admin}}) 不适用于 mongodb
- vb.net - 从命令提示符运行时,带有 .net 5 的 Visual Basic 现在会显示 dll 信息消息框
- cloud - Dropbox、Google 等云存储系统如何在客户端存储数据?
- dataframe - 如何解析函数可以处理pyspark中的可变长度