所以我的代码运行得很好,但是今天当我尝试将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。因为到目前为止,它一直运行良好。我知道如何解决这个问题,以及如何将String转换为Bool。
编辑3:谢谢大家的回答。对不起,我无法正确表达自己的想法。我只想了解这种不可预测的行为,为什么会发生呢?谁是罪魁祸首? Xcode,Firebase SDK?这段代码完美地工作了大约一个月。我不是在寻求解决方案,我只是对这种行为感到好奇。如果来自Firebase团队的人可以解释这个问题,那就太好了。
编辑4::已删除图像并添加了代码。还通过@Jay的注释解决了问题。
答案 0 :(得分:1)
您需要先检查快照是否为nil,然后再检查该值。
if let data = snapshot.value as? Bool {
... }
答案 1 :(得分:0)
这是最近才发生的事。我发现我在子值周围有引号,例如。 “真正”。删除引号,@ Maximo的解决方案应能按预期工作。