특정 키를 비교하여 사전 배열에서 이중 항목을 제거하려면 다음 방법을 구현하려고했습니다. 그러나,이 확장 방법에 의한 오류로 작동하지 않습니다값이 같은 사전의 순서에 대한 확장
Binary operator == cannot be applied to two 'Equatable' operands
이 분명히 있습니다 equatable 및 (Iterator.Element.Value) 같은 종류의, 그래서 왜 작동하지 않는 이유는 무엇입니까?
저는 Equatable을 제약이 아닌 특정 유형으로 취급한다는 것을 알고 있습니다. 일반 유형이나 where Iterator.Element == [String: Any], Iterator.Element.Value: Equatable
을 작성하여 작동하게 만들 수 없습니다.
여러분은이 문제를 해결하는 방법에 대한 단서가 있습니까? [String: 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가 제공 했더라도. 아마 잘못 읽었을 것입니다. 1422. –
도와 줘서 고맙습니다. 문제는 이것들이 모두 JSON이며 서버의 로컬과 원격을 병합해야한다는 것입니다. 병합 후에는 Core Data에 저장되며 다른 구조체 유형을 만드는 데 많은 과도한 작업이 필요합니다. NSManagedObjects이므로 삽입하기 전에 사용할 수 없습니다. 메모리 컨텍스트에서 이들 모두를 저장하고 비교하는 것은 너무 단순한 것처럼 보였습니다. 그래서이 확장에 대한 시도를 계속했습니다. – Suryu