Swift-为什么在可选数组上调用map时,而不是直接在数组上调用map时,其行为会有所不同?

Swift-为什么在可选数组上调用map时,而不是直接在数组上调用map时,其行为会有所不同?,swift,Swift,下面是一个例子: let d = ["list": [["a": 1], ["a": 2]]] d["list"].map { item in print("item is \(item)") } [["a": 1], ["a": 2]].map { item in print("item is \(item)") } 我希望它们打印相同的内容,因为d[“list”]=[[“a”:1],“a”:2]。但当我运行它时,第一个给了我: item is [["a": 1], ["

下面是一个例子:

let d = ["list": [["a": 1], ["a": 2]]]

d["list"].map { item in
    print("item is \(item)")
}

[["a": 1], ["a": 2]].map { item in
    print("item is \(item)")
}
我希望它们打印相同的内容,因为
d[“list”]=[[“a”:1],“a”:2]
。但当我运行它时,第一个给了我:

item is [["a": 1], ["a": 2]]
第二点:

item is ["a": 1]


item is ["b": 2]
为什么会这样

d[“list”]
返回一个可选值,
map
函数不是
Array.map
,而是
optional.map

添加一个
会有所不同

d["list"]?.map { item in
    print("item is \(item)")
}
还要注意,在这种情况下,您应该使用
forEach
,而不是
map
。这将使错误变得显而易见:

// compilation error "Value of optional type not unwrapped..."
d["list"].forEach { item in
    print("item is \(item)")
}
这是因为
d[“list”]
返回一个可选值

你说的是
d[“list”]=[[“a”:1],“a”:2]]
,但事实并非如此。当你尝试代码时

if d["list"] == [["a": 1], ["a": 2]] {
    print("true")
}
这段代码无法编译。有一个错误:

错误:上下文类型“\u OptionalNilComparisonType”不能与数组文字一起使用

您必须用
打开
d[“list”]
,它将正确打印