Search code examples
swiftoperatorswhitespaceoption-typeconditional-operator

Why is Swift's ternary operator so picky about whitespace?


The question is very simple, but I just could not find the answer!

Why doesn't

return x == 0? "" : "Hello"

compile but

return x == 0 ? "" : "Hello"

does?

This is really weird because all the other operators don't need an extra white space. e.g.

let x = 1+1
let y = 1 + 1

are the same.

I think it has something to do with optionals. But when you use a ? operator on a variable, it must be used like this:

let s: String? = nil
let x = s?.startIndex

I mean it must follow another operator, right?


Solution

  • 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.