我可以使用可选链接为可选的 属性 提供默认值吗?

Can I use Optional chaining to give a default value for the property of an optional?

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

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

我想这样做,但我收到一条错误消息,提示我的字符串?没有展开。 email 是一个非可选字符串。

这是否可能而无需事先解包 host?如果不能,为什么我尝试这样做不起作用?

您无需打开包装即可使用。这不是错误发生的原因。毕竟 ?? 就是为处理这种情况而设计的。

错误是由于运算符优先级引起的。编译器认为它应该首先评估 + ,连接两个字符串,然后进行零合并。它看到第二个操作数没有展开并抱怨。

为了使其产生预期的结果,通过添加方括号明确告诉编译器首先计算 ??

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

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

class Host {
    var email: String?
}

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

输出为:

Meeting host: nil