The question is very simple, but I just could not find the answer!
Why doesn\'t
return x == 0? \"\" : \"Hello\"
compile but
I think it has something to do with optionals.
It does. The documentation on operators says:
There is one caveat to the rules [regarding whitespace around operators]. If the
!
or?
predefined operator has no whitespace on the left, it is treated as a postfix operator, regardless of whether it has whitespace on the right. To use the?
as the optional-chaining operator, it must not have whitespace on the left. To use it in the ternary conditional (?
:
) operator, it must have whitespace around both sides.
Yes, I'm pretty sure (as you presumed) the problem is with optionals.
I prefer to write my ternary operators like this...
let num = (isTrue) ? (1) : (0)
Of course, you can choose what's in the parentheses, whether it's simply a literal (as shown) or not.