【发布时间】:2018-12-14 03:44:06
【问题描述】:
所以我的代码运行良好,但今天当我尝试将 Firebase 的 snapshot.value 转换为 Bool 时,它返回 nil。我根本没有对代码进行任何更改。但如果我将它转换为字符串,它就可以正常工作(因为?字符串返回“true”)。
在我投射到 [String: Bool] 的另一个地方出现了同样的问题。
与之前不同的一点是,我今天安装了 Xcode 10 beta 3(也安装了 Xcode 9.4)。两个 Xcode 版本都返回 nil。代码如下:
if let currentUserId = Auth.auth().currentUser?.uid{
Database.database().reference().child("users/\(currentUserId)/share").observe(.childAdded) { (snapshot) in
let data = snapshot.value as? Bool
if data == true{
self.showNotificationsBadge()
}
}
}
编辑:快照不为零。您可以在控制台窗格中看到它。我已经打印了 snapshot.key 和 .value。
编辑 2:如果我的问题引起任何混淆,我很抱歉。这个问题的主要目的是了解问题,是Firebase SDK还是Xcode。因为到目前为止它工作得很好。我知道如何解决这个问题以及如何将字符串转换为布尔值。
编辑 3:感谢大家的回答。很抱歉我无法正确表达我的想法。我只想知道这种意外的行为以及为什么会发生?谁是这里的罪魁祸首? Xcode,Firebase SDK?这段代码运行了大约一个月,运行良好。我不是在寻求解决方案,我只是对这种行为感到好奇。如果 Firebase 团队的人能解释这个问题,那就太好了。
编辑 4: 删除图像并添加代码。感谢@Jay 的评论,也解决了这个问题。
【问题讨论】:
-
最有可能的是,您的一个节点中有一些不是布尔值的东西(例如,“true”不是布尔值)。尝试注释掉闭包中的代码并将其替换为 print(snapshot) 并检查控制台中的输出。通常,在您的问题中也要包含您的 Firebase 结构的 sn-p。另外,请不要在您的问题中包含图片。包括代码和结构作为文本。要获取您的 Firebase 结构,请使用 Firebase 控制台->导出 JSON 并复制粘贴您的结构的 sn-p。见images and links are evil
-
...并复制了这些发现;具有“true”节点而不是 true 会导致 data var 为 nil,如预期的那样。
-
我刚刚发布了图片以在一个地方显示代码、调试器和控制台。您可以在控制台中看到我打印了 snapshot.key & .value。价值是真实的而不是“真实的”。但我明白你的意思。我会记住这一点,不会发布图像。感谢您指出 Firebase 结构。我刚刚发现了问题。当我们的 Android 开发人员将其作为字符串编写时,我将其编写为布尔值。但仍然很好奇为什么它不能将包含 true 的对象转换为 Bool。无论如何,既然是评论,我怎么能接受你的回答?
-
...留下image 的链接,因为我已将其从问题中删除。您可以在此处查看控制台中的快照值。
-
太棒了!很高兴您发现了问题!无需接受,因为这是人们遇到的常见问题。