我們知道在swift如果定義的struct model需要實(shí)現(xiàn)Equatable
協(xié)議中的==
操作符考润,一個(gè)最簡(jiǎn)單的例子:
那么如果是Class呢狭园?
貌似也沒(méi)問(wèn)題。如果這個(gè)類(lèi)繼承自NSObject
呢糊治?
好了唱矛,第一個(gè)問(wèn)題出現(xiàn)了,這個(gè)很簡(jiǎn)單井辜,因?yàn)镹SObject已經(jīng)遵循了Equatable
協(xié)議绎谦,所以編譯器會(huì)提示多余操作,直接刪除這行粥脚。
應(yīng)該就可窃肠。。刷允。
WTF冤留,a != b
竟然也是true?
不是已經(jīng)指明了只要lhs.name == rhs.name
就算相等了嗎树灶?
難道編譯器沒(méi)有為我們實(shí)現(xiàn)!=操作符纤怒,而直接使用了父類(lèi)的!=操作符?我們來(lái)添加一個(gè)!=驗(yàn)證一下天通。
終于對(duì)了泊窘,看來(lái)在子類(lèi)中沒(méi)有實(shí)現(xiàn)!=操作符會(huì)直接使用父類(lèi)的,此處的父類(lèi)為NSObject土砂,而它的取等運(yùn)算使用的是hash值州既,那么兩個(gè)對(duì)象!=會(huì)返回true。