问问题
43 次
1 回答
1
显然,出于某种原因,将第一部分括在括号中是有效的:
(s?.hashValue).map(Double.init)
我认为这在某种程度上是由于?
优先级较低,或者可选链接与其他表达式的工作方式不同。添加括号可能会导致s?.hashValue
成为表达式。
编辑:
以下是Swift 参考的相关摘录:
如果包含可选链接表达式的后缀表达式嵌套在其他后缀表达式中,则只有最外层的表达式返回可选类型。在下面的示例中,当 c 不是 nil 时,它的值被解包并用于评估 .property,其值用于评估 .performAction()。整个表达式 c?.property.performAction() 具有一个可选类型的值。
所以s?.hashValue
实际上并不计算为可选类型,因为它嵌套在另一个表达式中。通过添加()
,我将其分离为另一个表达式,手动使其评估为可选类型。
于 2018-09-12T07:02:46.923 回答