[英]How to unwrap an optional into a variable and then use that variable in the next iteration of a while loop?
[英]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
如果a
为nil
,则返回默认值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.