【问题标题】:How does Swift handle if statements?Swift 如何处理 if 语句?
【发布时间】:2016-05-20 17:05:57
【问题描述】:

如果我有陈述:

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

if 语句在发现object = nil 后是否立即中断?

【问题讨论】:

标签: swift logical-operators short-circuiting


【解决方案1】:

是的

当您将条件列表C[0]...C[n] 与AND && 运算符连接时,运行时会按顺序评估每个条件以及是否找到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(并且子句的评估确实停止)。

【讨论】:

    【解决方案2】:

    答案是肯定的。

    尝试简单 - 见下文 - 但请注意,您的测试将无法正常工作 - 非可选不能是 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")
    }
    

    【讨论】:

      猜你喜欢
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 2013-08-16
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多