引言
當(dāng)我們想要比較Swift中自定義類值是否相等的時候谐檀,我們就需要實現(xiàn)Equatable協(xié)議
協(xié)議就只有下面這一個方法
static func == (lhs: Self, rhs: Self) -> Bool
只需要比較各個屬性值相等就可以了,但是我發(fā)現(xiàn)一個問題,我們沒有處理Optional的情況啊佣谐,函數(shù)的參數(shù)沒有哼转?
磷蛹,貌似代碼在Optional的情況下工作的也挺正常
那么參數(shù)是Optional時到底發(fā)生了什么呢疚脐?
探索
于是在網(wǎng)上搜索了一下生宛,發(fā)現(xiàn)也有人有同樣的疑惑县昂,這位仁兄做了實驗,發(fā)現(xiàn)Optional的情況和預(yù)期一致陷舅,所以不用管了倒彰。
It just works!
那就更疑惑了,沒寫代碼怎么就可以用呢莱睁,好在swift是開源的待讳,我們可以一路找到swift是如何實現(xiàn)這樣的功能的。
然后就在Optional.swift的中看到了這樣的代碼仰剿,就是他替我們處理了Optional的情況(我們省略了大量的注釋创淡,建議大家看下注釋內(nèi)容,寫得非常仔細(xì))
extension Optional : Equatable where Wrapped : Equatable {
@inlinable
public static func ==(lhs: Wrapped?, rhs: Wrapped?) -> Bool {
switch (lhs, rhs) {
case let (l?, r?):
return l == r
case (nil, nil):
return true
default:
return false
}
}
}
也就是說南吮,如果lhs和rhs琳彩,不是nil,那么就用我們實現(xiàn)的方法部凑;如果都是nil露乏,那么就返回true;
剩下的情況就都返回false涂邀。