> On Jan 18, 2017, at 2:59 AM, Francisco Javier Fernández Toro via
> swift-evolution <[email protected]> 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
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution