以下是一个例子:
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]
为什么会这样?
答案 0 :(得分: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)")
}
答案 1 :(得分:0)
这是因为d["list"]
返回一个可选项。
你说d["list"] == [["a": 1], ["a": 2]]
,但事实并非如此。当您尝试代码时
if d["list"] == [["a": 1], ["a": 2]] {
print("true")
}
此代码无法编译。有一个错误:
错误:上下文类型' _OptionalNilComparisonType'不能与数组文字一起使用
您必须使用d["list"]
或!
展开?
,它才能正确打印。