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