我可以使用Optional chaining为可选属性提供默认值吗?

时间:2017-07-27 13:44:22

标签: swift optional optional-chaining

是否可以同时使用可选链接和零合并?

print("Meeting host: " + meeting.host?.email ?? “No host”)

我想这样做但是我收到错误说我的字符串?没有打开包装。 email是非可选字符串。

这是否可行,而不必事先打开host,如果不是,为什么我这样做的尝试不起作用?

2 个答案:

答案 0 :(得分:3)

您不必打开它以使其发挥作用。这不是错误发生的原因。毕竟,??旨在处理此类案件。

由于运算符优先级而发生错误。编译器认为它应首先评估+,连接两个字符串,然后执行nil-coalescing。它看到第二个操作数没有解开并抱怨。

要使其产生预期结果,请明确告诉编译器首先通过添加括号来评估??

print("Meeting host: " + (meeting.host?.email ?? “No host”))

答案 1 :(得分:1)

有一个更简单的解决方案:

class Host {
    var email: String?
}

var host: Host? = nil
print("Meeting host: " + String(describing: host?.email))

输出结果为:

  

会议主持人:nil