2015-12-17 63 views
2

我不知道switch語句中可以比較哪種類型的值。該公文稱:Swift2的switch語句中可以比較哪種類型的值

案例可以搭配很多不同的模式,包括間隔的比賽,元組和強制轉換爲特定類型的

還有什麼?我可以比較switch語句中的類類型嗎?

想我哈瓦A類:

​​

然後我可以檢查是否A級兩個對象是相等的。但是,我還是不能這樣做:

var a1 = A(); var a2 = A() 
switch a1 { 
case a2: //do something 
} 

雖然我們很少寫這樣的代碼,我仍然看好switch語句中斯威夫特如何工作非常好奇。

回答

3

Expression Patterns解釋的,

由表達模式表示的表達使用所述夫特標準庫~=操作者的輸入表達式的值相比較。

,如果你想爲你的自定義類型的switch語句中使用可以定義func ~=(lhs: A, rhs: A)

但我也建議只使用Equatable協議,執行==,然後你可以寫if a1 == a2 { ... }

事實上,標準庫提供

public func ~=<T : Equatable>(a: T, b: T) -> Bool 

所以,如果你符合Equatable,你不需要提供自己的~=

+0

'=='是爲NSObject子類提供的,我相信。它使用'isEqual(_ :)'。 – jtbandes

+0

即使A類不符合「Equatable」協議,並且過載「==」運算符就足夠,似乎我可以編寫if a1 == a2 {...}。總之,你的意思是什麼類型的重載'〜='操作符可以在switch語句中進行比較? – sevenkplus

+0

你可以⌘-點擊'=='運算符來查看它的定義。是的,'〜='是用於'switch'語句的。 – jtbandes