首页 > 解决方案 > 在 Xcode 中调试时如何更改 let 值?

问题描述

我正在尝试在 Xcode(Xcode 12)上进行中期调试时更改 let 值。但是,当我尝试这个调试器命令时

expression isLongBoxRide = true

我在 Xcode 调试器终端中收到此错误。“错误:无法分配给值:'isLongBoxRide' 是不可变的 isLongBoxRide = true”它不会让我在调试时更改 let 值。当我尝试更改 var 时它会起作用。我只是好奇是否可以在 Xcode 上调试时更改 let 值。如果可以的话,那就太好了。

标签: iosswiftxcodedebugging

解决方案


问题是编译器可能会在编译时分析 let 常量,然后优化您的代码。例如,想想这样的事情:

func x() -> String {
    let doit = false
    if (doit) {
        return "Yes"
    } else {
        return "No"
    }
}
// ...
let result = x()

聪明的编译器会将其更改为

func x() -> String {
    return "Yes"
}
// ...
let result = x()

甚至x()完全放弃:

    let result = "Yes"

因此,根本没有doit常数,特别是return "No"您的程序中不再有分支。这是一个极端的例子,编译器通常只会在发布模式下这样做,但是您可以看到在调试期间允许更改常量并不容易,因为编译器可能必须恢复一些优化。


推荐阅读