繁体   English   中英

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

[英]How to use string variable without unwrap optional value

我对Swift 2.0的基础知识非常困惑。 我有下面的代码来显示从字典到标签的姓氏字符串值。

let lastName:String? = self.userDict.objectForKey("last_name")
self.lblLastName.text = "Last Name: " + lastName!

但是有时这段代码会在值分配给self.userDict之前运行,而上述代码在这段时间内得到self.userDict.objectForKey("last_name") nil并抛出错误。

对于解决方案,我修改了我的代码,例如波纹管,并保留了该值,但是编译器没有将其视为有效

let lastName:String? = self.userDict.objectForKey("last_name")
self.lblLastName.text = "Last Name: " + lastName?   //--ERROR: Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'?

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

您需要提供一种方法来处理字典没有关键字"last_name"值并返回nil 最简单的方法是使用零合并操作 ??

如果nil合并运算符( a ?? b )包含值,则解开可选a b如果anil ,则返回默认值b 表达式a始终是可选类型。 表达式b必须匹配存储在a内的类型。

您可以执行以下操作:

let lastName: String = self.userDict.objectForKey("last_name") ?? "N/A"
self.lblLastName.text = "Last Name: " + lastName

您还可以使用可选绑定来检查从字典中检索的值是否为nil。 然后,您可以有条件地将字符串分配给标签( 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"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM