2016-08-18 20 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'を使うのは奇妙に思えます。最初はかなり不明でした。しかし、本質的に大文字と小文字が区別されない 'enum'のように機能する別個の' namespace'構造を持つ価値があるのか​​どうかはわかりません。 – Alexander

+0

@AlexanderMomchliov名前空間として大文字小文字の列挙を使ってちょっと変わっていると確信しています。意図した機能よりも有用な副作用のようなものです。私はstdlibの一例(['MemoryLayout '](https://developer.apple.com/reference/swift/memorylayout)だけ考えることができますが、実際にはちょうど名前空間だけが必要です)それは一般的なパラメータを利用しているので、単に名前空間ではない)、私は 'namespace'構造の欠如を理解することができます。 – Hamish

関連する問題