swift中的!=

作者: gogo_coder | 来源:发表于2016-08-09 09:50 被阅读34次

    我们知道在swift如果定义的struct model需要实现Equatable协议中的==操作符,一个最简单的例子:

    Paste_Image.png

    那么如果是Class呢?

    Paste_Image.png

    貌似也没问题。如果这个类继承自NSObject呢?

    Paste_Image.png

    好了,第一个问题出现了,这个很简单,因为NSObject已经遵循了Equatable协议,所以编译器会提示多余操作,直接删除这行。

    Paste_Image.png

    应该就可。。。

    Paste_Image.png

    WTF,a != b竟然也是true?

    不是已经指明了只要lhs.name == rhs.name就算相等了吗?

    难道编译器没有为我们实现!=操作符,而直接使用了父类的!=操作符?我们来添加一个!=验证一下。

    Paste_Image.png

    终于对了,看来在子类中没有实现!=操作符会直接使用父类的,此处的父类为NSObject,而它的取等运算使用的是hash值,那么两个对象!=会返回true。

    Paste_Image.png

    相关文章

      网友评论

        本文标题:swift中的!=

        本文链接:https://www.haomeiwen.com/subject/yszrsttx.html