Различие, которое вы испытываете, связано с тем, что Objective-C имеет:
(a) истинные процедуры (пустые функции / методы), которые не возвращают значения;и (б) более сильная система типов, чем PHP
В вашем примере основная проблема (а) - вы вызываете методы, которые возвращают ничто , а ничто нене логическое значение.
В PHP-функциях всегда возвращается что-то , функция, определенная как возвращающая пустоту, фактически определяется как возвращающая «бесполезное» значение.Однако PHP преобразует практически все во что угодно (и делает это непоследовательно, для добавления «веселья»), поэтому «бесполезное» значение имеет логическое значение - хотя, вероятно, это зависит от фазы луны ;-) Эта функцияэто означает, что вы можете надежно связать «void» функцию после , которая возвращает значение - <expr convertible to boolean> && <"void" function>
будет работать в PHP (но полученное логическое значение является произвольным).То же самое не будет работать в Objective-C ( не попытайтесь исправить это с помощью оператора запятой, у этого оператора есть скрытые ловушки).
Так что, если вы придерживаетесь функций /методы, которые возвращают либо логическое значение, либо тип, неявно или явно преобразуемый в логическое значение (например, для типов указателей nil
- false, другие значения - true; для целочисленных типов 0 - false, все остальное - true), вы можете «условно связывать» операции.Если вы должны сделать это, это другой вопрос ...
PS Если вы хотите сбить с толку, это коротко:
(isItOpen = !isItOpen) ? [it open] : [it close];
, что сделает большинство людейсделать двойной дубль; -)