[swift-evolution] Derived Equatable conformance akin to Codable
    Logan Shire 
    logan.shire at gmail.com
       
    Fri May 26 02:10:24 CDT 2017
    
    
  
Given we now have precedent in the form of the derived Codable conformance coming in Swift 4.0,
it begs the question why we don’t offer the same behavior for value types that declare themselves to be Equatable
and have all Equatable properties. E.g.
struct A: Equatable {
  let foo: String
  let bar: Int
}
struct B: Equatable {
  let baz: Double
}
struct C: Equatable {
  let a: A
  let b: B
}
let a = A(foo: “hello”, bar: 1)
let a2 = A(foo: “hello”, bar: 2)
a == a2 // false
let b = B(baz: 3.1)
let c = C(a: a, b: b)
le c2 = C(a: a2, b: b)
c == c2 // false
You would always be free to shadow the provided implementation:
extension A {
  func ==(lhs: A, rhs: A) {
    return lhs.foo == rhs.foo
  }
}
a == a2 // true
It’s up for debate whether this should apply to reference types, or Hashable, but at a bare minimum we should
offer it for value types consisting of Equatable value types that explicitly declare but don’t implement the conformance.
Thanks!
    
    
More information about the swift-evolution
mailing list