我们知道在swift如果定义的struct model需要实现Equatable
协议中的==
操作符,一个最简单的例子:
那么如果是Class呢?
Paste_Image.png貌似也没问题。如果这个类继承自NSObject
呢?
好了,第一个问题出现了,这个很简单,因为NSObject已经遵循了Equatable
协议,所以编译器会提示多余操作,直接删除这行。
应该就可。。。
Paste_Image.pngWTF,a != b
竟然也是true?
不是已经指明了只要lhs.name == rhs.name
就算相等了吗?
难道编译器没有为我们实现!=操作符,而直接使用了父类的!=操作符?我们来添加一个!=验证一下。
Paste_Image.png终于对了,看来在子类中没有实现!=操作符会直接使用父类的,此处的父类为NSObject,而它的取等运算使用的是hash值,那么两个对象!=会返回true。
Paste_Image.png
网友评论