【问题标题】:In swift, why true && false = 16? [duplicate]很快,为什么 true && false = 16? [复制]
【发布时间】:2015-06-01 08:13:41
【问题描述】:

我看过 Swift 规范,上面写着

逻辑 AND 运算符 (a && b) 创建逻辑表达式,其中 两个值都必须为真,整个表达式也为真。

如果任一值为假,则整体表达式也将为假。事实上,如果第一个值为 false,则甚至不会计算第二个值,因为它不可能使整个表达式等于 true。这称为短路评估。

这个例子考虑了两个 Bool 值,只有当两个值都为真时才允许访问:

let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
    println("Welcome!")
} else {
    println("ACCESS DENIED")
}
// prints "ACCESS DENIED"

与这个问题无关,这是一个错误吗?

【问题讨论】:

  • 你还没有执行那一行,所以c是未定义的。转到下一行,然后它应该是正确的。
  • 通常,突出显示的行是尚未执行的行。您是否尝试过跳到下一行,所以 && 实际上会被执行?

标签: ios xcode swift debugging


【解决方案1】:

您可能在 实际评估此行之前遇到了断点(至少您的屏幕截图表明如此)。再往下走一步,你会看到c 按预期变成false

此时,c 仅指向内存中的一个随机位置,调试器恰好将其解释为16

【讨论】:

  • 你比我早了 30 秒左右。
  • 哈哈,对不起老兄,不过请接受我的投票!
【解决方案2】:
var c = a && b

断点在语句处。该语句尚未执行。你看到的是垃圾。

另见Corrupted stack/heap under debugger when simulating?

【讨论】:

    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2019-02-08
    • 2020-09-27
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多