我試圖通過比較它們的特定鍵來實現以下方法來刪除字典數組中的重複條目。然而,這種擴展方法是行不通的,由於錯誤:對值爲可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