2015-02-17 2 views
0

Предположим, у меня есть массив MyObject, который содержит только один объект MyObject, который отличается от объекта, переданного как параметр в функции contains.Почему оператор if действует так?

Я хотел бы понять, почему, когда я пишу код, как это, это работает, я не хожу на линии myObject.toAdd = true

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

, но когда я не пишу == true он идет прямо внутри мой, если заявление в то время как оно не должно (с моей точки зрения и то, что я хочу сделать, по крайней мере ...)

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

в чем разница?

Спасибо за вашу помощь

+0

Вы ничего не сравниваете в этой части 'содержит (self.myObjectArray !, myObject)' – Ethaan

+0

, но когда я просто **, если содержит (self.myObjectArray !, myObject) **, он работает как ожидалось. Думаю, тогда, когда в выражении if есть два или более предикатов, вам нужно явно их сопоставить с чем-то ... Правильно? Спасибо @Ethaan – Nico

+0

Хмм, и если вы поместите 'if self.myObjectArray! = Nil', он вернёт true правильно? – Ethaan

ответ

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 за его значение истинности; вот что такое состояние is.

+0

Да, я еще не привык к необязательным привязкам. благодаря – Nico

Смежные вопросы