2017-05-04 110 views
-2

我可以比較沒有關聯值的關聯枚舉大小寫嗎?請檢查下面的代碼片段如何比較沒有關聯值的關聯枚舉

//Declare associated enum 
enum Example 
{ 
    case test(x:Int) 
    case test1(x:String) 
} 

//Creating enum with associated value 
let testWithAssociatedValue = Example.test(x:0) 
if case .test = testWithAssociatedValue { //WorksFine 
} 

//Now having enum with no associated value 
let testWithNoAssociatedValue = Example.test 

Now Why comparing enum that has no associated value like below,gives me compile error?. 
if case .test = testWithNoAssociatedValue { 
} 

回答

1

因爲Example.test不是enum的情況。嘗試將代碼放入遊樂場,或者檢查type(of: Example.test)。它會給你(Int) -> Example。也就是說,在引擎蓋下,Example.test表現得像一個需要Int的函數,併爲您提供了一個Example對象。這就是爲什麼Example.test(x: 10)給你的枚舉案例。

「擁有沒有關聯值的關聯枚舉」的概念沒有意義。這聽起來像你想讓關聯的類型可選,所以你可以說Example.test(x: nil)