我对Swift 2.0的解包基础非常困惑。我有以下代码来显示从字典到标签的姓氏字符串值。
let lastName:String? = self.userDict.objectForKey("last_name")
self.lblLastName.text = "Last Name: " + lastName!
但有时候这段代码在值{= 1}}之前运行,当时代码上面的代码为self.userDict
nil并抛出错误。
对于解决方案,我修改了我的代码,如下所示并保持该值解包,但编译器不将其视为有效
self.userDict.objectForKey("last_name")
请建议我有效的方式来满足要求。
答案 0 :(得分:6)
当字典对键"last_name"
没有任何价值并返回nil
时,您需要提供一种处理案例的方法。最简单的方法是使用nil coalescing operator ??
:
nil合并运算符(
a ?? b
)如果包含值,则展开可选a
;如果b
为a
,则返回默认值nil
。表达式a
始终是可选类型。表达式b
必须与a
中存储的类型匹配。
您可以执行以下操作:
let lastName: String = self.userDict.objectForKey("last_name") ?? "N/A"
self.lblLastName.text = "Last Name: " + lastName
答案 1 :(得分:1)
您还可以使用 可选绑定 来检查字典中检索到的值是否为零。然后,您可以有条件地将字符串分配给标签(lblLastName
)。
if let lastName = self.userDict.objectForKey("last_name") {
self.lblLastName.text = "Last Name: " + lastName
} else {
self.lblLastName.text = "Last Name: " + "some other hard coded string"
}