如果我有声明:
if object != nil && object.property == 2 {
//do something
}
if语句在找到object = nil
后会中断吗?
答案 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")
}
在这种情况下,只评估c0
和c1
,整个表达式将被解释为false
。
您可以在Playground中自行测试。
如果将表达式定义为多个子句的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")
}