与 Optionals 的逻辑不一致

Logical inconsistency with Optionals

Apple 声称此表达式的计算结果为两件事

let x= fubar?.boo

如果 fubar 存在,它会解包 fubar 并获取 boo 假设它是一个真实的对象而不是可选的。如果 fubar 不存在,你会得到 nil。但是 x 本身并未声明为可选,因此在一种情况下 x 要么是可选的,要么不是,这是在运行时确定的。这似乎是一个糟糕的设计。

你的假设是错误的。编译器推断 x 的类型,并且由于使用了可选链接,它将推断 x 的类型为 Optional.

x 的类型将始终是 Optional,其值是 nil(如果 fubarnil 或 [= 的值18=] 包裹在 Optional 中以防 fubar 不是 nil.