假设我有一个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
}
有什么区别?
感谢您的帮助
答案 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与true
或false
进行比较只是愚蠢的(也许并不完全可预测?)。条件是已经评估Bool的真值;这就是条件是。