我有一个可选值,它被分配了一个值,成功打印,但是当我检查它时它是 nil [重复]

Posted

技术标签:

【中文标题】我有一个可选值,它被分配了一个值,成功打印,但是当我检查它时它是 nil [重复]【英文标题】:I have an optional value that is assigned a value, printed succesfully, but when i check it it's nil [duplicate] 【发布时间】: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,但正如您所见,它可以与您的代码一起使用。 【参考方案1】:

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

试试这个:

guard let safePaid = paid else  return  

【讨论】:

【参考方案2】:

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

【讨论】:

是的,但是付费 = dict["paid"] as?布尔 我不知道那是什么意思。您是否尝试打印paid 而不是dict["paid"]?这应该是您问题的答案。

以上是关于我有一个可选值,它被分配了一个值,成功打印,但是当我检查它时它是 nil [重复]的主要内容,如果未能解决你的问题,请参考以下文章

尝试读取我的数据库用户详细信息,它会作为可选值打印出来

如何防止致命错误:在展开可选值时意外发现 nil

发现可选值错误 nil swift 3

《函数式swift》—swift为什么是用可选值?

可选链式调用

hibernate JPA:可选值生成