为啥 Swift 的三元运算符对空格如此挑剔?

Posted

技术标签:

【中文标题】为啥 Swift 的三元运算符对空格如此挑剔?【英文标题】:Why is Swift's ternary operator so picky about whitespace?为什么 Swift 的三元运算符对空格如此挑剔? 【发布时间】:2016-04-05 19:58:50 【问题描述】:

问题很简单,就是找不到答案!

为什么不

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

编译但是

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

会吗?

这真的很奇怪,因为所有其他运算符都不需要额外的空格。例如

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

都是一样的。

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

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

我的意思是它必须跟随另一个运营商,对吧?

【问题讨论】:

【参考方案1】:

我认为这与可选项有关。

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

规则有一个警告[关于运算符周围的空格]。如果!? 预定义运算符左侧没有空格,则将其视为后缀运算符,无论右侧是否有空格。要将? 用作可选链接运算符,它的左侧不能有空格。要在三元条件 (?:) 运算符中使用它,它的两边必须有空格。

【讨论】:

“在三元条件中使用它”可能会令人困惑。 “它”是三元条件运算符本身?。 TLDR,您实际上可以在三元组中使用可选链。【参考方案2】:

是的,我很确定(如您所料)问题出在可选选项上。

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

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

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

【讨论】:

以上是关于为啥 Swift 的三元运算符对空格如此挑剔?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 三元条件运算符实现仅在设备上挑剔?

三元运算符为啥以及何时返回左值?

为啥不能重载三元运算符?

为啥 Go 没有三元条件运算符 [关闭]

为啥我的三元运算符会出现这些错误?

在 Swift 三元运算符中使用 OR 操作数