我对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)
请建议我有效的方式来满足要求.
当字典没有键值"last_name"和返回值时,您需要提供一种处理案例的方法nil.最简单的方法是使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
549 次 |
| 最近记录: |