【问题标题】:Unpack Boolean from Firebase database snapshot?从 Firebase 数据库快照中解压布尔值?
【发布时间】:2021-04-09 19:29:46
【问题描述】:

晚上好!

我试图在我的 swift iOS 应用程序中从 firebase 检索布尔值,但我遇到了一个愚蠢的问题。从我的快照中解包字符串效果很好,但布尔值是另一回事......我显然错过了一些(希望)简单的东西。代码如下:

for child in snapshot.children{

    let key = (child as AnyObject).key as String
    let shouldBeBool = (child as AnyObject).value as Bool
    ...
    // Do Stuff with the values
}

我在 Let shouldBeBool 行上收到“表达式类型不明确,没有更多上下文”错误。

如果我将“as Bool”更改为“as String”,代码将编译,但一旦尝试将快照中的布尔值作为字符串读取,应用程序就会按预期崩溃。

我也试过这个,得到同样的错误:

for child in snapshot.children{

    let key = (child as AnyObject).key as String
    var shouldBeBool: Bool
    shouldBeBool = (child as AnyObject).value as! Bool
    ...
    // Do Stuff with the values
}

我不明白强制将其作为布尔值展开是多么模棱两可。 swift 有不同类型的布尔值吗?

希望我只是错过了一些愚蠢的事情。

感谢您的宝贵时间。

更新 接受的答案有效(谢谢!),还有一个额外的修改。工作代码如下。

for child in snapshot.children{

    let key = (child as AnyObject).key as String
    let b = (child as! DataSnapshot).value as! NSNumber // Note the double force unwrapping... bad practice?
    let shouldBeBool = Bool(truncating: b)
    ...
    // Do Stuff with shouldBeBool as a boolean and key as a string
}

【问题讨论】:

    标签: json swift firebase firebase-realtime-database


    【解决方案1】:

    根据documentation of value,返回的具体类型之一是NSNumber,并注意它包含布尔值,因此您需要将shouldBeBool 转换为NSNumber,然后使用Bool 的@987654327 @ 将NSNumber 转换为Bool

    let number = (child as AnyObject).value as NSNumber
    let shouldBeBool = Bool(truncating: number) // false if 0, true otherwise
    

    【讨论】:

    • 我猜 Firebase 总是在内部将布尔值存储为 NSNumber。我自己没有检查过这段代码。
    • 感谢您的回复!不幸的是,这仍然会在“let number =...”行上出现“值的模糊使用”错误。但是,我很感兴趣,这可能是一个特定于 firebase 的问题。我认为它很快(正如我的问题所推断的那样),因为我在使用适用于 android 的 firebase 时没有这个问题。还有其他想法吗?
    • 尝试删除AnyObject的演员表。我认为这没有必要,因为 Swift 可以为您推断类型。此外,在 Swift 中,value 的类型是 Any?,所以它有可能是 nil。所以这条线是let number = child.value as? NSNumber。然后,您需要解开可选的。如果您尝试此操作并且警告消息消失,我将更新我的答案。
    猜你喜欢
    • 2019-11-01
    • 2022-01-21
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多