Swift 如何处理 if 语句?

How does Swift handle if statements?

如果我有语句:

if object != nil && object.property == 2 {
    //do something
}

if语句一发现object = nil就中断了吗?

答案是肯定的。

尝试起来很简单 - 见下文 - 但请注意,你写的测试不会工作 - 非可选不能 nil,所以你必须打开它来测试 .property.

struct MyObj {
    var property: Int
}

var object: MyObj? = nil

if object != nil && object!.property == 2 {
    print("Not nil")
} else {
    print("Nil") // Prints - would have crashed if test fully evaluated
}

object = MyObj(property: 2)

if object != nil && object!.property == 2 {
    print("Not nil")  // Prints
} else {
    print("Nil")
}

当您使用 AND && 运算符连接条件列表 C[0]...C[n] 时,运行时会按顺序 求值 每个条件如果找到C[i]个条件false,那么整个表达式的求值确实结束,判断为false.

let c0 = true
let c1 = false
let c2 = true

if c0 && c1 && c2 {
    print("Hello world")
}

在这种情况下,只有 c0c1 会被评估,整个表达式将被解释为 false.

你可以在Playground中自己测试一下。

c0 || c1 || c2

对称地,如果您将一个表达式定义为多个子句的 OR || 串联,则整个表达式将被解释为 true(子句的求值会停止)找到第一个真实条件。