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”]
或?
,它将正确打印