迁移到Swift 4.2后模糊使用“过滤器”

时间:2019-11-12 06:36:20

标签: swift

我正在努力解决以下有关Dictionary扩展的小错误。我意识到有一个类似的答案,指出在返回变量之前声明变量类型可以解决该问题: Ambiguous use of 'filter' when converting project to Swift 4

但是我不确定'filter'类型吗?任何帮助都会很棒。干杯

func pick(_ keys: [Key]) -> Dictionary {
    return filter { (key: Key, _) -> Bool in
        keys.contains(key)
    }
}

2 个答案:

答案 0 :(得分:1)

您已经向filter添加了自己的Dictionary方法,这不是必需的,因为Swift已经有了这样的方法:filter

此方法似乎是在Swift 4.2中添加的,它解释了为什么以前没有收到错误。由于Swift现在为您提供了此方法,因此您可以安全地删除自己编写的filter

答案 1 :(得分:1)

对于字典,filter闭包的参数是一个包含键和值的元组。一直以来,您无法在闭包声明中分隔元组的组成部分,而必须自己在主体中进行拆分。

您可以尝试以下方法:

func pick(_ keys: [Key]) -> Dictionary 
{
    return filter { (pair) -> Bool in
        let (key, _) = pair
        return keys.contains(key)
    }
}

甚至

func pick(_ keys: [Key]) -> Dictionary 
{
    return filter{ keys.contains($0.0)}
}

并且您应该删除filterDictionary has one built in的实现,这很可能是“歧义使用”错误的原因。