【问题标题】:Swift: Cannot convert value of type '(Any) throws -> Bool? to expected argument type '(Any) throws -> Bool?斯威夫特:不能转换类型的值'(任何)抛出 - >布尔?到预期的参数类型 '(Any) throws -> Bool?
【发布时间】:2017-02-06 11:01:17
【问题描述】:

我正在尝试获取两个数组并将它们组合成一个没有任何重复项的新数组。但是,我无法绕过以下错误。

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)

【问题讨论】:

  • 您只是在这里混淆了编译器。你试过contains(element: $1["name"] ?? "")而不是contains(where:...)吗?
  • 通过此更改,它会返回相同的错误,建议将元素更改为 where,这会导致我遇到与以前相同的错误

标签: arrays swift


【解决方案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]
}

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多