onmyway133 / DeepDiff

🦀Amazingly incredible extraordinary lightning fast diffing in Swift
https://onmyway133.com/apps/
Other
2.05k stars 145 forks source link

Troubles with API #46

Open psi-gh opened 4 years ago

psi-gh commented 4 years ago

For example, in my code i have a very common case:

protocol BaseClassProtocol { }
class ConcreteClass1: BaseClassProtocol { } 
class ConcreteClass2: BaseClassProtocol { }

Anywere in my codebase, there is only BaseClassProtocol being used. For example:

let array:[BaseClassProtocol] = ...

this array contains various classes/structs with the same protocol. How can I apply DeepDiff library and DiffAware protocol to compare various arrays of BaseClassProtocol objects?

Voxar commented 4 years ago

Create a wrapper struct that implements DiffAware

struct DiffWrapper: DiffAware {
  var item: BaseClassProtocol
  var diffId: String {
    return item.id
  }
  static func compareContent(_ a: DiffWrapper, _ b: DiffWrapper) -> Bool {
    return a.item == b.item
  }
}
let changes = diff(old.map(DiffWrapper.init), new.map(DiffWrapper.init))
psi-gh commented 4 years ago

@Voxar Yeah, I came up with the similar structure. I asked because I don't like this overhead. But I understand there are some Swift's nuances which leads to difficulties in such kind of API.