2017-02-08 55 views
0

是否有一種方法可以將枚舉關聯值類型集定義爲所有情況下的默認值,而不是像下面那樣爲每個元素定義它?枚舉與默認類型的關聯值

enum Device { 
    case phone(String) 
    case watch(String) 
    case tablet(String) 
} 

我想避免重複自己與(字符串)

回答

1

在這種情況下可能更容易將其定義是這樣的:

enum DeviceType { 
    case phone 
    case watch 
    case tablet 
} 

struct Device { 
    var type: DeviceType 
    var name: String 
    ... init, etc. 
} 

然後你就可以處理的類型和字符串彼此獨立,因爲如果每個枚舉案例都有一個字符串,這聽起來可能是字符串與枚舉值沒有直接關係。

+0

這基本上是我的第一種方法,但希望直接在枚舉類型中保留附加數據。這是一個壞方法嗎?爲什麼? – kkris1983

+0

我認爲只有每個枚舉情況需要不同的數據纔有意義。如果設備數據結構總是需要例如。一個名稱字符串,然後它是一個單獨的字段,並使用一個結構更清潔,因爲:a)它顯示類型和名稱是不同的數據片段。 b)如果將來您需要添加更多的字段,而不必將其複製到所有的情況下,則它更具可擴展性。 如果enum中的數據根據​​具體情況而有所不同,那麼在enum中有數據是有意義的,但在描述的情況下,我認爲struct是正確的答案。 – simonWasHere

+0

感謝您的解釋 – kkris1983