有没有办法用 2 的幂(或计算值)定义一个快速枚举

Posted

技术标签:

【中文标题】有没有办法用 2 的幂(或计算值)定义一个快速枚举【英文标题】:Is there a way to define a swift enum with power of 2 (or calculated value) 【发布时间】:2016-04-29 13:16:59 【问题描述】:

有没有办法在 Swift 2 中做这样的事情?

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

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

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

【问题讨论】:

看看OptionSetType and enums。对于 OptionSetType,您需要 struct,而不是 enum 【参考方案1】:

正如@Martin R 所说,你需要结构。

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)

【讨论】:

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

以上是关于有没有办法用 2 的幂(或计算值)定义一个快速枚举的主要内容,如果未能解决你的问题,请参考以下文章

枚举值为什么使用1,2,4,8,16,32等2的幂方

C++ 中有没有办法定义一个枚举,以便在访问时它的值必须是完全限定的?

任何人都知道快速获取枚举值的自定义属性的方法吗?

任何人都知道快速获取枚举值的自定义属性的方法吗?

JAVA枚举可以用来做啥?举一个简单的例子(用枚举、不用)

枚举中缺少值或空字符串