Swift 无法提取字典的字符串值<;hashable,String>;

Swift 无法提取字典的字符串值<;hashable,String>;,swift,dictionary,Swift,Dictionary,我已声明遵守以下词典 var locations:Dictionary<String,String> = ["loc1":"Los Angeles","loc2":"San Francisco"]; 但是编译器却抱怨:可选类型“String”的值没有展开;你想用“!”吗或“?”? 如果我更改变量位置:字符串=位置[“loc1”]到变量位置:字符串?=地点[“loc1”],这意味着字符串是可选的,编译器错误消失 但正如你所看到的,我还没有将字典定义为可选的,例如字典。所以我想知道为什

我已声明遵守以下词典

var locations:Dictionary<String,String> = ["loc1":"Los Angeles","loc2":"San Francisco"];
但是编译器却抱怨:
可选类型“String”的值没有展开;你想用“!”吗或“?”?

如果我更改变量位置:字符串=位置[“loc1”]到变量
位置:字符串?=地点[“loc1”],这意味着字符串是可选的,编译器错误消失


但正如你所看到的,我还没有将字典定义为可选的,例如
字典
。所以我想知道为什么Swift会将我的值类型转换为可选字符串(string?)幕后?

这是因为您的字典可能不包含该键的值,所以它会返回一个可选字符串以防万一。

这是因为您的字典可能不包含该键的值,所以它会返回一个可选字符串以防万一。

提取字典值的代码不知道是否
locations[“loc1”]
将返回一个值-它也可以返回
nil
。因此,不能将其分配给非可选的
字符串
,因为这将保证该字符串不为零,事实并非如此

但是,如果希望将
location
作为非可选字符串,可以对其进行初始化,然后使用
if let
从字典中展开值:

var location : String = "Unknown"
if let value = locations["loc1"] {
     location = value
}

稍微详细一点,但保证
位置
包含值或
“未知”
,并且不能是

提取字典值的代码不知道
位置[“loc1”]
是否会返回值-它也可以返回
。因此,不能将其分配给非可选的
字符串
,因为这将保证该字符串不为零,事实并非如此

但是,如果希望将
location
作为非可选字符串,可以对其进行初始化,然后使用
if let
从字典中展开值:

var location : String = "Unknown"
if let value = locations["loc1"] {
     location = value
}
稍微详细一点,但保证
位置
包含值或
“未知”
,并且不能为
nil