2016-08-18 65 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