我试图通过比较它们的特定键来实现以下方法来删除字典数组中的重复条目。然而,这种扩展方法是行不通的,由于错误:对值为可Equatable的字典序列的扩展
Binary operator == cannot be applied to two 'Equatable' operands
这些显然equatable和同一类型(Iterator.Element.Value),那么,为什么不工作?
我看到它将Equatable视为特定类型,而不是约束。我不能使它与泛型类型或通过编写where Iterator.Element == [String: Any], Iterator.Element.Value: Equatable
。
你们有没有关于如何解决这个问题的线索?
extension Sequence where Iterator.Element == [String: Equatable] {
public func removeDoubles(byKey uniqueKey: String) -> [Iterator.Element] {
var uniqueValues: [Iterator.Element.Value] = []
var noDoubles: [Iterator.Element] = []
for item in self {
if let itemValue = item[uniqueKey] {
if (uniqueValues.contains { element in
return itemValue == element
}) {
uniqueValues.append(itemValue)
noDoubles.append(item)
}
}
}
return noDoubles
}
}
不知道SE-0142如何帮助这里,我想你的意思是[参数化扩展](https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#parameterized-extensions)? :) – Hamish
我的意思是参数化扩展,但我虽然SE-0142规定。可能误读了142. –
谢谢你的帮助。问题是这些都是JSON,我需要合并来自服务器的两个 - 本地和远程两个。合并后它被保存到核心数据,并且它看起来像创建另一个结构类型过多的工作,因为这些是NSManagedObjects,所以我不能在插入它们之前使用它们。在内存环境中,将它们存储和比较看起来对于这个简单的目的来说太多了,所以我继续尝试这个扩展。 – Suryu