You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Dec 5, 2022. It is now read-only.
Could you explain why we need to use DiffAware protocol when Hashable do the same thing and there is a lot of helper functional out-of-the-box like Hasher etc.
For example, we have a simple struct:
struct SomeStruct<T: DiffAware, U: DiffAware> {
var value: T
var valuesArray: [U]
}
And if we want to conform DiffAware protocol, we need to calculate diffId something like this:
var diffId: Int {
let valueIds = self.values.map({ $0.diffId })
var hasher = Hasher()
hasher.combine(self.value.diffId)
hasher.combine(valueIds)
return hasher.finalize()
}
And if all the objects conformed Hashable protocol, I will not need to use map in this case and it will affect the performance.
As I remember map complexity is O(n).
The text was updated successfully, but these errors were encountered:
@ton252 Hi, Hashable and Equatable are in fact useful, but I've seen it has caused some confusions, so I introduced DiffAware with diffId and compare function to make things more explicit. And diffId would ensure more id uniquing.
@ton252 To avoid having to repeatedly conform types to DiffAware, you can do this:
extensionDiffAwarewhere Self:Hashable{publicvardiffId:Int{return hashValue
}publicstaticfunc compareContent(_ a:Self, _ b:Self)->Bool{return a == b
}}extensionUUID:DiffAware{}extensionCGFloat:DiffAware{}// ...
This way, you can conform any type that is already Hashable to DiffAware without implementing diffId and compareContent each time. Saved me a couple lines.
Could you explain why we need to use DiffAware protocol when Hashable do the same thing and there is a lot of helper functional out-of-the-box like Hasher etc.
For example, we have a simple struct:
And if we want to conform DiffAware protocol, we need to calculate diffId something like this:
And if all the objects conformed Hashable protocol, I will not need to use map in this case and it will affect the performance.
As I remember map complexity is O(n).
The text was updated successfully, but these errors were encountered: