在lldb中将布尔值更改为false后,它仍在评估为true。这是简化版。
=>是一个断点
func getCount(actionWasSuccessful successful: Bool) -> Int {
=> var count = 0
// (lldb) po successful (returns true)
// (lldb) exp successful = false
// (lldb) po successful (returns false)
if successful {
=> count += 1 // breakpoint stops here
} else {
=> count = 0 // breakpoint should stop here
}
return count
}
let count = getCount(successful: true)
print(count) // returns 1
答案 0 :(得分:3)
Swift会在调试信息中发挥作用。例如,它保留变量的“影子”副本,并报告给调试器,以解决swift积极地删除变量的事实,因为它可以理由是不再可以访问它们。如果没有在定义该变量的整个块中都存在另一个副本,那么您逐步执行该函数时,许多局部变量将变得不可用。卷影副本保持最新状态,但是lldb目前无法将更改从卷影推送到实际变量。
卷影副本解决了一个相当严重的调试问题,但代价是使它很难通过调试器更改变量值。据我了解,对该问题采取更原则性的解决方案并非微不足道。
请通过bugs.swift.org提交与此有关的错误。这将有助于编译人员正确地确定优先级。