Swift:无法转换类型'(Any)throws的值 - >布尔?预期参数类型'(任意)抛出 - >布尔?

时间:2017-02-05 23:13:13

标签: arrays swift

我试图将两个数组合并到一个没有任何重复的新数组中。但是,我无法解决以下错误。

Cannot convert value of type '(Any) throws -> Bool? to expected argument type '(Any) throws -> Bool?

我试图合并两个包含多个词典的数组。我正在比较"名称"在数组中的每个字典中。

let array2Name = array2.flatMap({$0["name"]}) // ["eli", "will"]
array2 = array1.reduce(array2) { !array2Name.contains(where: $1["name"] as! (Any) throws -> Bool? ?? "") ? $0 + [$1] : $0 }
print(array2)

1 个答案:

答案 0 :(得分:1)

您没有正确比较传递给contains闭包的值。而且你不能在闭包内的闭包内使用$变量。

let array2Name = array2.flatMap { $0["name"] }
array2 = array1.reduce(array2, { result, value in
    !array2Name.contains(where: { $0 == value["name"] ?? "" }) ? result + [value]: result
})
print(array2)

编辑: 这消除了array2Name值。

array2 = array1.reduce(array2) { result, value in
    result.contains(where: { $0["name"] == value["name"] }) ? result: result + [value]
}