可选绑定不解包字典

时间:2015-09-06 12:11:11

标签: swift dictionary

我有以下字典

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"]无法解开?

2 个答案:

答案 0 :(得分:2)

giorashc的回答是正确的,但我想我会发布这个,因为它可能有助于理解其中的原因。

使用通用参数KV定义字典。

对于给定的字典dict : [K:V]

dict[k]的输出属于V?类型。

在这种情况下K = StringV = String?

因此下标访问结果的类型为String??。已经指出的内容已解包到String?

答案 1 :(得分:1)

item["name"]确实被解开​​了。它被解开String?。请记住,词典总是返回一个可选值(对于给定键不存在值的情况)。

在您的情况下,值 IS 是字符串类型的另一个可选项。

如果您的词典被声明为[String: String](值类型没有?),那么您不必用!

打开该值。