2016-08-18 64 views
11

假設枚舉或結構是靜態的,如果它們不在實例中存儲任何值。靜態枚舉和靜態結構是否有區別?靜態枚舉和靜態結構之間的差異

enum StaticEnum { 
    static var someStaticVar = 0 
    static func someStaticFunc() {} 
} 

struct StaticStruct { 
    static var someStaticVar = 0 
    static func someStaticFunc() {} 
} 
+1

相關:http://stackoverflow.com/questions/38585344/swift-constants-struct-or-enum。 –

回答

9

主要的區別在於,你不能構造一個沒有案例的枚舉。因此,如果您只是在尋找某些用作某些靜態成員的名稱空間,則首選枚舉,因爲您無法意外創建實例。

let e = StaticEnum() // error: 'StaticEnum' cannot be constructed because it has no accessible initializers 
let s = StaticStruct() // Useless, but legal 
+0

完美,謝謝! –

+1

使用'enum'作爲名稱間距的方式似乎很奇怪。起初我發現它很不清楚。但我不確定這是值得有一個單獨的'命名空間'構造,其行爲基本上像一個無事例'枚舉' – Alexander

+0

@AlexanderMomchliov我當然同意,它感覺有點奇怪使用無案例枚舉作爲命名空間,它的感覺像更像是一個有用的副作用比預期的功能。儘管實際上需要很少的「只是一個名稱空間」(我只能想到stdlib中的一個例子,[MemoryLayout '](https://developer.apple.com/reference/swift/memorylayout)),但甚至它利用了一個泛型參數,所以不是'只是一個名字空間'),我可以理解缺少'namespace'結構。 – Hamish