Apple声称此表达式的计算结果有两点
let x= fubar?.boo
如果fubar
存在,它将解开fubar
并获取boo
,这是一个真实的对象,不是一个可选的对象。如果fubar
不存在,则会得到nil
。但是,x
本身并不是声明为可选的,因此在一种情况下,x
将是可选的还是不是可选的,这在运行时确定。这似乎是一个糟糕的设计。
答案 0 :(得分:2)
您的假设是错误的。编译器推断x
的类型,由于使用了可选的链接,它将推断x
的类型为Optional
。
x
的类型将始终为Optional
,在nil
为fubar
的情况下,其值为nil
或{{1} }封装在boo
中,以防Optional
不是fubar
。