我已经宣布了下面的字典
var locations:Dictionary<String,String> = ["loc1":"Los Angeles","loc2":"San Francisco"];
Run Code Online (Sandbox Code Playgroud)
然后试图简单地将它分配给一个variable而不是一个constant
var location:String = locations["loc1"];
Run Code Online (Sandbox Code Playgroud)
但随后编译器抱怨: Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'?
如果我更改var location:String = locations["loc1"];为var location:String? = locations["loc1"];,这意味着String是可选的,编译器错误就会消失.
但正如你所看到的,我没有将我的字典定义为可选的,例如Dictionary<String,String?>.所以只是想知道为什么Swift将我的值类型转换为场景后面的可选字符串(String?)?
拉取字典值的代码不知道是否locations["loc1"]会返回一个值 - 它也可以返回nil.因此,它不能被赋予非可选项String,因为这将保证String不是nil,但事实并非如此.
但是,如果您想要location作为非可选String,您可以初始化它,然后使用if let从字典中解包值:
var location : String = "Unknown"
if let value = locations["loc1"] {
location = value
}
Run Code Online (Sandbox Code Playgroud)
略微冗长,但保证location包含值或"Unknown"不能nil.
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |