在迅速,为什么真正&&假= 16?

时间:2015-06-01 08:13:41

标签: ios xcode swift debugging

when I exec the code, the c = 16, why ?

我看过Swift规范,它说

  

逻辑AND运算符(a && b)创建逻辑表达式   两个值必须为true才能使整个表达式也为真。

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

此示例考虑两个Bool值,并且只有两个值都为true时才允许访问:

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

它没有关于这个问题,这是一个错误吗?

2 个答案:

答案 0 :(得分:5)

你可能会在之前点击断点实际评估此行(至少你的截图是这样的)。再往前走一步,您会看到c成为false,符合预期。

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

答案 1 :(得分:4)

var c = a && b

断点在声明中。该声明尚未执行。你看到了垃圾。

另见Corrupted stack/heap under debugger when simulating?