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

Dec*_*nna 3 swift optional-chaining option-type

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

\n\n
print("Meeting host: " + meeting.host?.email ?? \xe2\x80\x9cNo host\xe2\x80\x9d)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

这是否可以在无需host事先打开包装的情况下实现?如果不是,为什么我的尝试不起作用?

\n

Swe*_*per 6

您不必打开它即可使其工作。这不是错误发生的原因。??毕竟,它是为了处理此类情况而设计的。

\n\n

该错误是由于运算符优先级而发生的。编译器认为它应该评估第+一个,连接两个字符串,然后进行零合并。它发现第二个操作数没有解包并抱怨。

\n\n

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

\n\n
print("Meeting host: " + (meeting.host?.email ?? \xe2\x80\x9cNo host\xe2\x80\x9d))\n
Run Code Online (Sandbox Code Playgroud)\n

  • print() 接受可变数量的参数,因此也可以编写 `print("会议主持人:", meet.host?.email ?? "No host")` (2认同)