Swift 实例化的可选变量在Xcode调试器中显示为nil

Swift 实例化的可选变量在Xcode调试器中显示为nil,swift,xcode,debugging,xcode11,swift5.1,Swift,Xcode,Debugging,Xcode11,Swift5.1,自从我升级到Xcode 11和Swift 5.1之后,我遇到了一个奇怪的问题——在一个可选变量被实例化之后,它仍然可以在Xcode调试器中显示为up nil 我有一个可选的类变量,名为booking: var booking: Booking? public struct Booking: Codable { var id: Int? var start_time: Date? var payment_currency: String = "USD" var p

自从我升级到Xcode 11和Swift 5.1之后,我遇到了一个奇怪的问题——在一个可选变量被实例化之后,它仍然可以在Xcode调试器中显示为up nil

我有一个可选的类变量,名为
booking

var booking: Booking?
public struct Booking: Codable {
    var id: Int?
    var start_time: Date?
    var payment_currency: String = "USD"
    var payment_amount: Int?
}
它的类型是
预订

var booking: Booking?
public struct Booking: Codable {
    var id: Int?
    var start_time: Date?
    var payment_currency: String = "USD"
    var payment_amount: Int?
}
当我在代码中单步执行时,我可以在分配之前看到
预订
。。。零,太好了:

然后在分配之后。。。什么,还是零??:

我想知道它是否被当作一个懒惰的变量来对待。但它不是零,因为它可以访问:

搜索了一段时间后,我想知道我在Xcode中的构建模式是否没有设置“Debug executable”标志。但确实如此。我甚至清理和重建了该项目与国旗关闭和打开,以确保

无论我在变量视图中查看
booking
,还是在控制台视图中输入
p booking
,它都显示为nil

这是怎么回事?我需要在这次升级之前调试的可预测性

更新

我提炼出一种简单的方法来重现这个问题。首先,创建一个空的单视图项目,并将其添加到AppDelegate.swift的顶部:

public struct Booking: Codable {
    var start_time: Date?
    var payment_currency: String = "USD"
}
然后将这些行添加到应用程序中(uu3;:didFinishLaunchingWithOptions:)func:

像以前一样设置断点,并且在运行时,请注意,即使在被分配之后,调试器仍将booking显示为nil,就像我原来的情况一样

然后注释掉
start\u time
变量,重新运行,注意现在调试器显示
booking
在赋值后有一个值,这是人们所期望的

因此,在这样的结构中,日期变量(可选与否)似乎会使调试变得混乱。特别是日期变量——将变量更改为其他类型,如Int、Int?、String、String?。。。没有问题


除非我遗漏了一些非常基本的东西,否则这在我看来就像是Xcode调试器中的一个bug。如果是这样,最好的报告方式是在?

看来我在Xcode 11中发现了一个bug。正如上面的更新所述,它很容易复制。我已经向苹果公司提出了这个问题


我现在仍然在寻找解决方法,因为我使用了很多包含日期变量的结构。如果有人能找到,请在下面评论

>错误的原因不是<代码> var启动时间:日期/<代码>存在或不存在,但该日期是一个快速的基础覆盖。如果删除可编码一致性并将
start\u time
设置为
NSDate?
,则一切正常。因此,很明显,LLDB会被类似于
Date?
的Swift覆盖类型所迷惑

在中,我们看到了与
URL?
相同的问题。如果我们将其更改为
NSURL?
一切正常

我不是说那是可行的解决办法!您想要并且需要使用Swift类型。我只是说这就是搞乱LLDB的原因。您可以在报告错误时包含该信息


此错误将在Xcode 12.5中修复。

您能否提供复制此问题的说明?如果是这样的话,这可能是一个很好的错误报告给苹果。我想这是我明天的下一步,试图把它提炼成一个非常小的项目。不过,我希望其他人也遇到过这种情况,并且有一个简单的解决方案或其他我不知道的东西。我不复制就说不出来,但你的描述和屏幕截图只是在向我尖叫“bug”。)您是否尝试过常见的故障排除步骤?“为了增加麻烦:重新启动Xcode、清理构建、清除派生数据。我做了所有这些,”亚历山大说。唉,运气不好。可能与这个问题相同的错误:在那个问题中,情况完全不同,但我们在调试器中再次显示了一个
nil
,而事实上事情根本不是
nil
。只是发现了相同的错误。。。我在调试,花了几个小时试图重新编写代码。我太相信调试器告诉我的话了。一点也不是零。。。Ughhhh@user1060500真烦人,不是吗?我鼓励你向苹果报告,并跟踪,这就是马特提交的错误报告的地方。我在Xcode 12.3中仍然遇到这个问题。在Xcode 12中仍然面临这个问题。你可能想将你的错误报告与我的错误报告链接起来。我们需要他们来解决这个问题!阿门,我会的!一张小纸条——我发现它不一定是可选的。哦,不!我以为我考得很好(哈!不,你做到了。谢谢你也在那里发布了大消息。他们会解决的。仍然存在于Xcode 12.2(12B45b)中)