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