我可以使用可选链接为可选的 属性 提供默认值吗?
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
是否可以像这样同时使用可选链接和零合并?
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