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

Bha*_*n_m 1 iphone ios swift

我对Swift 2.0的解包基础非常困惑.我有以下代码来显示从字典到标签的姓氏字符串值.

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

但有时这个代码在值分配之前运行到self.userDict那时代码上面的self.userDict.objectForKey("last_name")nil并抛出一个错误.

对于解决方案,我修改了我的代码,如bellow并保持该值解包,但编译器不会将其视为有效

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 '?'?
Run Code Online (Sandbox Code Playgroud)

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

cou*_*elk 6

当字典没有键值"last_name"和返回值时,您需要提供一种处理案例的方法nil.最简单的方法是使用nil合并运算符 ??:

的零合并运算符(a ?? b)进行解包的可选a,如果它包含一个值,或者返回一个默认值b,如果anil.表达式a始终是可选类型.表达式b必须与存储在其中的类型匹配a.

你可以这样做:

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