为什么if语句的行为是这样的?

时间:2015-02-17 02:37:41

标签: swift if-statement

假设我有一个MyObject数组,它只包含一个MyObject,它与contains函数中作为参数传递的对象不同。

我想了解为什么,当我编写这样的代码时,它起作用,我不会去myObject.toAdd = true

if self.myObjectArray != nil && contains(self.myObjectArray!, myObject) == true {
    myObject.toAdd = true
}

但是当我不写== true时,它会直接进入我的if语句,但它不应该(从我的观点来看,至少我想做什么......)< / p>

if self.myObjectArray != nil && contains(self.myObjectArray!, myObject) {
    myObject.toAdd = true
}

有什么区别?

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

if self.myObjectArray != nil && contains(self.myObjectArray!, myObject) == true {
    myObject.toAdd = true
}

我认为,您的目标是打开可选的self.myObjectArray并在contains来电时使用它,只有在安全的情况下才能这样做。这不是你问题的直接答案,但是首先在条件绑定中解包Swift可选处理实践要好得多:

if let arr = self.myObjectArray {
    if contains(arr, myObject) {
        // ...
    }
}     

结果更清晰。就个人而言,我也喜欢由此产生的筑巢;在Swift 1.2中,甚至可能存在围绕嵌套的方法,但我不认为它是可以避免的。

另外,回到原来的问题,在一个条件下将Bool与truefalse进行比较只是愚蠢的(也许并不完全可预测?)。条件是已经评估Bool的真值;这就是条件