swift iOS开发swift的坑

swift中的!=

2016-08-09  本文已影响34人  gogo_coder

我们知道在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
上一篇下一篇

猜你喜欢

热点阅读