我正在努力解决以下有关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)
}
}
答案 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)}
}
并且您应该删除filter
,Dictionary
has one built in的实现,这很可能是“歧义使用”错误的原因。