Swift 为什么会这样快!=零检查失败?

Swift 为什么会这样快!=零检查失败?,swift,null,optional,Swift,Null,Optional,当变量窗口(和打印语句)显示test为nil时,我不明白为什么执行会落在这里的debugPrint语句中: let test = cxticsByUuid[cxtic.uuid] if test != nil { debugPrint("Duplicate cxtic retrieved. Bailing out of peripheral's did

当变量窗口(和打印语句)显示
test
nil时,我不明白为什么执行会落在这里的debugPrint语句中:

                let test = cxticsByUuid[cxtic.uuid]
                if test != nil
                {
                    debugPrint("Duplicate cxtic retrieved. Bailing out of peripheral's didDiscoverCharacteristicsFor...")
                    return
                }
更新:尽管变量窗口显示相关变量为零,但实际上它是一个双精度可选变量。因此,它必须展开两次,如相关文章所示


在这种情况下,您应该使用if-let

if let test = cxticsByUuid[cxtic.uuid] {
    debugPrint("Duplicate cxtic retrieved. Bailing out of peripheral's didDiscoverCharacteristicsFor...")
} else {
    //variable test is nil
}

谢谢,但那完全是以同样的方式失败的。我没有修改你。事实并非如此,当你想访问if let中的非可选变量时,你可以这样做,前提是它是有效的,并检查它是否为nil。这难道不是简单地添加了一个关于
test
未使用的无用编译器警告吗?@Gereon你可以总是忽略
else{…}
part,如果在nil情况下不需要执行任何操作。可以使用
if-let\uUticsbyuid[cxtic.uuid]
来避免编译器警告。但是这个答案中的解决方案并不能解决双重可选问题??nil{…}@pawello2222我想你已经解决了这个问题,但这不是重复的IMO(许多读者不清楚这是什么原因)。如果你愿意写一个解释这里发生了什么的答案,那可能会很有帮助。(特别是解释为什么
nil!=.some(nil)
)@RobNapier我已经阅读了瓦卡瓦马对重复问题的回答,它看起来非常清晰和详细。我不认为它遗漏了什么。如果奥斯卡理解(而且他们似乎理解),那么这表明它确实足够接近了。谢谢。是的,直到发布这篇文章之后,我才注意到双选项,但我离开了它,因为它的行为可能令人困惑;一切都表明所讨论的变量为零。