> On Jan 18, 2017, at 2:59 AM, Francisco Javier Fernández Toro via 
> swift-evolution <swift-evolution@swift.org> wrote:
> 
> Hi,
> 
> I've found that when you have a class hierarchy which implements Equatable, 
> if you want to have the != operator working as expected, you need to override 
> it, it's not enough with ==. 
> 
> If you don't define you own subclass != operator, Swift compiler will use the 
> super class to resolve that operation.
> 
> Is there any reason for that?

The `equal(to:)` method inside `Subclass` is not a valid override of 
`Superclass` because its argument only accepts `Subclass` instances, but the 
parent method needs to work with all `Superclass` instances. If you write it as 
an override, it should work:

class Subclass: Superclass {
    let bar: Int
    init(foo: Int, bar: Int) {
        self.bar = bar
        super.init(foo: foo)
    }
    
    override func equal(to: Superclass) -> Bool {
      if let toSub = to as? Subclass {
        return bar == toSub.bar && super.equal(to: to)
      }
      return false
    }
}

We should probably raise an error, or at least a warning, instead of silently 
accepting your code as an overload. Would you be able to file a bug on 
bugs.swift.org about that?

-Joe
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution
  • [swift-evolution] Met... Francisco Javier Fernández Toro via swift-evolution
    • Re: [swift-evolu... Joe Groff via swift-evolution
      • Re: [swift-e... Francisco Javier Fernández Toro via swift-evolution
        • Re: [swi... Tony Allevato via swift-evolution
          • Re: ... Francisco Javier Fernández Toro via swift-evolution
            • ... Tony Allevato via swift-evolution
              • ... Francisco Javier Fernández Toro via swift-evolution
                • ... Pierre Monod-Broca via swift-evolution
                • ... Goffredo Marocchi via swift-evolution
                • ... Karl Wagner via swift-evolution
                • ... Pierre Monod-Broca via swift-evolution

Reply via email to