【问题标题】:I have an optional value that is assigned a value, printed succesfully, but when i check it it's nil [duplicate]我有一个可选值,它被分配了一个值,成功打印,但是当我检查它时它是 nil [重复]
【发布时间】:2021-05-19 10:42:17
【问题描述】:

支付的可选布尔值为零。 它被分配了一个值。 值被打印出来。 下一行代码我有一个 else if。 该值为零。 问题:如何以及为什么?

【问题讨论】:

  • 复制/粘贴代码,这样更好。日志的输出是什么?如果您有多个文档,它只是最后一个值(因为它被覆盖)?
  • 如前所述,您需要发布代码,而不是图像。话虽如此,在我看来,您不是在打印paid,而是在打印dict["paid"]
  • 您需要以minimal reproducible example 的形式将所有相关代码作为文本,使用正确的代码格式 - 而不是屏幕截图 - 以 minimal reproducible example 的形式包含所有相关代码作为文本主题。
  • 可选的 Bool 支付为零。它被分配了一个值 - 不,它没有。为此,您需要一个 nil 合并运算符 - paid = dict["paid"] as? Bool ?? true。但是,由于这是在循环中,它将由循环一遍又一遍地分配,并且始终是循环的最后一次迭代将其设置为的任何值。此外,强制解包一个可选项通常是不明智的,因此 paid! 告诉您的代码您保证它不会为 nil,但正如您所见,它可以与您的代码一起使用。

标签: ios swift firebase optional


【解决方案1】:

似乎值在准备好之前就被访问了。您需要打开它以确保它在使用前已分配。

试试这个:

guard let safePaid = paid else { return } 

【讨论】:

    【解决方案2】:

    您打印的是dict["paid"],而不是paid。如果你打印paid,你可能会看到它是nil。

    【讨论】:

    • 是的,但是付费 = dict["paid"] as?布尔
    • 我不知道那是什么意思。您是否尝试打印paid 而不是dict["paid"]?这应该是您问题的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2022-08-15
    • 2016-02-14
    • 2012-11-22
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多