2016-04-29 6 views
0

Gibt es eine Möglichkeit, so etwas in Swift 2 zu tun?Gibt es eine Möglichkeit, eine schnelle Enum mit einer Potenz von 2 (oder einem berechneten Wert) zu definieren

enum Placement: Int, OptionSetType { 
    case 
    Left = 1 << 0, 
    Right = 1 << 1, 
    Center = 1 << 2, 
    Top = 1 << 3, 
    Bottom = 1 << 4, 
    Middle = 1 << 5 
    ; 
    .... 
} 

Das eigentliche Problem ist, dass der Compiler nicht intelligent genug, um zu sehen, dass diese Werte Konstanten sind aber besser lesbar als das Ergebnis.

Also, gibt es einige Syntaxzucker, die eine solche Deklaration erlauben?

+4

Werfen Sie einen Blick auf [OptionSetType und Aufzählungen] (http://stackoverflow.com/questions/36819163/optionsettype-and-enums). Für OptionSetType benötigen Sie eine 'struct', keine' enum'. –

Antwort

2

Wie @Martin R sagte, brauchen Sie struct.

struct Placement: OptionSetType { 
    let rawValue: Int 

    init(rawValue: Int) { 
     self.rawValue = rawValue 
    } 

    static let Left = Placement(rawValue: 1 << 0) 
    static let Right = Placement(rawValue: 1 << 1) 
    static let Center = Placement(rawValue: 1 << 2) 
    static let Top = Placement(rawValue: 1 << 3) 
} 
+0

Ist es nicht besser, 'let' Werte für jede Konstante anstelle von' var' zu verwenden? – Xvolks

+0

Ja, es ist tatsächlich besser. Ich habe die Antwort bearbeitet. –

Verwandte Themen