2016-08-18 9 views
11

Powiedzmy, że enum lub struct są statyczne, jeśli nie przechowują żadnych wartości w instancjach. Czy jest jakaś różnica między statycznym wyliczeniem a statyczną strukturą?Różnica między wyliczeniem statycznym a statyczną strukturą

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

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

Powiązane: http://stackoverflow.com/questions/38585344/swift-constants-struct-or-enum. –

Odpowiedz

9

Główna różnica polega na tym, że nie można zbudować wyliczenia bez żadnych przypadków. Dlatego jeśli szukasz czegoś, co może służyć jako przestrzeń nazw dla statycznych elementów, preferowane jest wyliczenie, ponieważ nie można przypadkowo utworzyć instancji.

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

Doskonale, dziękuję! –

+1

Używanie wyrażenia "enum" jako sposobu na wymienianie nazw wydaje się dziwne. Na początku uznałem to za dość niejasne. Ale nie jestem pewien, czy warto mieć oddzielną konstrukcję 'namespace', która działa zasadniczo jak bezobsługowy' enum' – Alexander

+0

@AlexanderMomchliov. Z pewnością zgadzam się, że czuje się trochę dziwnie, używając wyskakującego bezkolizyjnie wyliczania jako przestrzeni nazw, to czuje bardziej przypomina użyteczny efekt uboczny niż zamierzona funkcja. Chociaż biorąc pod uwagę, jak rzadko "po prostu przestrzeń nazw" jest rzeczywiście potrzebna (mogę tylko wymyślić jeden przykład w stdlib, ['MemoryLayout '] (https://developer.apple.com/reference/swift/memorylayout), ale nawet który korzysta z ogólnego parametru, więc nie jest "po prostu przestrzenią nazw"), mogę zrozumieć brak konstrukcji 'namespace'. – Hamish

Powiązane problemy