我們知道在swift如果定義的struct model需要實(shí)現(xiàn)Equatable協(xié)議中的==操作符,一個(gè)最簡(jiǎn)單的例子:

Paste_Image.png
那么如果是Class呢?

Paste_Image.png
貌似也沒(méi)問(wèn)題。如果這個(gè)類(lèi)繼承自NSObject呢?

Paste_Image.png
好了,第一個(gè)問(wèn)題出現(xiàn)了,這個(gè)很簡(jiǎn)單,因?yàn)镹SObject已經(jīng)遵循了Equatable協(xié)議,所以編譯器會(huì)提示多余操作,直接刪除這行。

Paste_Image.png
應(yīng)該就可。。。

Paste_Image.png
WTF,a != b竟然也是true?
不是已經(jīng)指明了只要lhs.name == rhs.name就算相等了嗎?
難道編譯器沒(méi)有為我們實(shí)現(xiàn)!=操作符,而直接使用了父類(lèi)的!=操作符?我們來(lái)添加一個(gè)!=驗(yàn)證一下。

Paste_Image.png
終于對(duì)了,看來(lái)在子類(lèi)中沒(méi)有實(shí)現(xiàn)!=操作符會(huì)直接使用父類(lèi)的,此處的父類(lèi)為NSObject,而它的取等運(yùn)算使用的是hash值,那么兩個(gè)對(duì)象!=會(huì)返回true。

Paste_Image.png