Swift如何处理if语句?

时间:2016-02-10 11:15:05

标签: swift logical-operators short-circuiting

如果我有声明:

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

if语句在找到object = nil后会中断吗?

2 个答案:

答案 0 :(得分:1)

当您使用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中自行测试。

enter image description here

c0 || c1 || C2

如果将表达式定义为多个子句的OR ||并置,则对称地,只要第一个表达式,整个表达式就会被解释为true(并且子句的评估会停止)条件被发现。

答案 1 :(得分:0)

答案是肯定的。

简单易用 - 请参阅下文 - 但请注意,如果编写的测试不起作用 - 非可选项不能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")
}