swift中这两个枚举声明的区别是什么?

时间:2014-12-25 05:52:19

标签: swift

enum MyEnum {
    case A, B, C
}

enum MyEnum2 {
    case A
    case B
    case C
}

这两个枚举声明有什么区别?

2 个答案:

答案 0 :(得分:1)

两种语法之间没有区别 - 您个人倾向于使用一种语法而不是另一种语法。

Swift允许您将单独的case添加到单个enum,以便您可以将具有相似关联值的enum常量分组,例如比如Barcode的书籍示例:

enum Barcode {
    case UPCA(Int, Int, Int, Int)
    case QRCode(String)
}

对于定义" plain" enum没有关联的值,这两种语法中的任何一种都是不错的选择。

答案 1 :(得分:1)

我认为值得一提的是,除非您定义类型并初始化第一个元素,否则枚举不会有任何原始值。

enum MyEnum {
    case A, B, C
}

let myEnum = MyEnum.A
let myEnumRawValue = myEnum.rawValue 

将失败并显示错误' MyEnum'没有名为' rawValue'。

的成员
enum MyEnum:Int {
    case A = 0, B, C
}

let myEnum = MyEnum.A
let myEnumRawValue = myEnum.rawValue 

不会失败。

如果你不想声明一个类型或初始化枚举,但仍然得到一个数字(也许是从一些基数索引)你也可以写:

enum MyEnum {
    case A, B, C

    func enumIndex(base:Int) -> Int {
        switch self {
        case .A:
            return base
        case .B:
            return base+1
        case .C:
            return base+2
        default:
            return base
        }
    }
}

在这种情况下

let myEnum = MyEnum.A
let myEnumIndex = myEnum.enumIndex(10)
println("myEnumIndex = \(myEnumIndex)")

将打印:

myEnumIndex = 10