[swift-users] Subtract a set of a subclass?

Zhao Xin owenzx at gmail.com
Fri Sep 2 21:47:17 CDT 2016

You are correct. Whether override `hashValue` is basing on the
implementation of `==`. You can't do what you want. You should follow the
required rules. However, if you don't want to get the unexpected result,
you can always use a `convenience init(_ instance:Self)` in `extension` to
convert subclass to  superclass as I did in previous replies.


On Sat, Sep 3, 2016 at 10:12 AM, Dmitri Gribenko <gribozavr at gmail.com>

> On Sat, Sep 3, 2016 at 4:47 AM, Zhao Xin via swift-users
> <swift-users at swift.org> wrote:
> > Hi Jordan,
> >
> > Both you and I were wrong.
> >
> > My wrongness: Your so called principle should be applied here.
> >
> > Your wrongness: If you really want a different hash value, the parent
> > equality function has to be conservative and say that the different types
> > are different.
> That's one way you can satisfy the rules, but not the only one.
> Think about class clusters.  NSString has many subclasses that store
> strings in different ways (for example, as Latin1 and UTF-16), but any
> subclass instance compares equal to any other subclass instance that
> carries the same character data, and also produces the same hash
> value.
> Dmitri
> --
> main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
> (j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20160903/d94c1c10/attachment.html>

More information about the swift-users mailing list