为什么 if 语句会这样?

Why does the if statement act like this?

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

我想明白为什么,当我这样写我的代码时,它是有效的,我没有去行 myObject.toAdd = true

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

但是当我不写 == true 时它直接进入我的 if 语句而它不应该(从我的角度和我想做的至少...)

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

有什么区别?

感谢您的帮助

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

我明白了,您的目标是解开 Optional self.myObjectArray 的包装并仅在安全的情况下在 contains 调用中使用它。这不是您问题的直接答案,但更好Swift 可选处理实践先在条件绑定中解包:

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

结果更清楚了。就个人而言,我也喜欢由此产生的嵌套;在 Swift 1.2 中,甚至可能有解决嵌套的方法,但我不认为这是要避免的事情。

此外,回到您最初的问题,在条件中将 Bool 与 truefalse 进行比较是愚蠢的(也许不是完全可以预测的?)。条件是 already 评估 Bool 的真值;这就是条件 .