【问题标题】: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")
}
在这种情况下,只会计算 c0 和 c1,整个表达式将被解释为 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")
}