2016-04-29 25 views
0

有没有办法在Swift 2中做这样的事情?有没有办法用2的幂(或计算值)来定义一个快速枚举

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

实际的问题是,编译器不够聪明,看不到这些值是常量,但比结果更具可读性。

那么,有没有一些语法糖允许这样的声明?

+4

看看[OptionSetType和枚举](http://stackoverflow.com/questions/36819163/optionsettype-and-enums)。对于OptionSetType,你需要一个'struct',而不是'enum'。 –

回答

2

正如@Martin R所说,你需要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

对每个常量而不是'var'使用'let'值不是更好吗? – Xvolks

+0

是的,它的确更好。我编辑了答案。 –

相关问题