我有以下字典
var menuItems: [[String: String?]] = [
["name": "Home", "identifier": "homeController"],
["name": "Page 2", "identifier": "page2"],
["name": "Page 3", "identifier": "page3"]]
现在我使用下一个代码
循环遍历字典var names: [String] = [String]()
for item in menuItems
{
if let name = item["name"]
{
names.append(name)
}
}
if let name = item["name"]
应解包并将名称分配给name
常量。分配作品但展开不会发生
names.append(name)
引发异常Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'?
为什么item["name"]
无法解开?
答案 0 :(得分:2)
giorashc的回答是正确的,但我想我会发布这个,因为它可能有助于理解其中的原因。
使用通用参数K
和V
定义字典。
对于给定的字典dict : [K:V]
dict[k]
的输出属于V?
类型。
在这种情况下K = String
和V = String?
因此下标访问结果的类型为String??
。已经指出的内容已解包到String?
答案 1 :(得分:1)
item["name"]
确实被解开了。它被解开String?
。请记住,词典总是返回一个可选值(对于给定键不存在值的情况)。
在您的情况下,值 IS 是字符串类型的另一个可选项。
如果您的词典被声明为[String: String]
(值类型没有?
),那么您不必用!