如何在不解包可选值的情况下使用字符串变量

时间:2015-10-30 06:52:55

标签: ios iphone swift

我对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")

请建议我有效的方式来满足要求。

2 个答案:

答案 0 :(得分:6)

当字典对键"last_name"没有任何价值并返回nil时,您需要提供一种处理案例的方法。最简单的方法是使用nil coalescing operator ??

  

nil合并运算符(a ?? b)如果包含值,则展开可选a;如果ba,则返回默认值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"
}
相关问题