2

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

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

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

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

4

2 回答 2

4

你不必打开它就可以让它工作。这不是发生错误的原因。??毕竟,它旨在处理此类情况。

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

为了让它产生预期的结果,明确告诉编译器??通过添加括号来评估第一个:

print("Meeting host: " + (meeting.host?.email ?? “No host”))
于 2017-07-27T13:49:22.637 回答
1

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

class Host {
    var email: String?
}

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

输出是:

会议主持人:无

于 2017-07-27T13:49:43.683 回答