为什么swift中的三元运算符如此挑剔?

时间:2016-01-01 03:30:17

标签: swift operators whitespace ternary-operator optional

问题很简单,但我找不到答案!

为什么没有

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

编译但是

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

确实

这真的很奇怪,因为所有其他运营商都不需要额外的空白区域。 e.g。

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

是一样的。

我认为这与选项有关。但是当你对一个变量使用?运算符时,它必须像这样使用:

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

我的意思是它必须跟随另一个操作员,对吗?

2 个答案:

答案 0 :(得分:7)

  

我认为这与选项有关。

确实如此。 operators上的文档说:

  

规则[关于运营商周围的空白]有一点需要注意。如果!?预定义运算符在左侧没有空格,则将其视为后缀运算符,而不管它是否在右侧有空格。要使用?作为可选链接运算符,它必须在左侧没有空格。要在三元条件(? :)运算符中使用它,它必须在两边都有空格。

答案 1 :(得分:0)

是的,我非常确定(正如您所假设的)问题在于选项。

我更喜欢写这样的三元运算符......

let num = (isTrue) ? (1) : (0)

当然,您可以选择括号中的内容,无论它是否只是文字(如图所示)。