枚举

作者: merlinCry | 来源:发表于2018-07-23 10:41 被阅读0次

二 枚举

枚举语法

enum CompassPoint {
    case north
    case south
    case east
    case west
}
也可以写在一行
enum Planet {
    case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}
注意 上面的例子中,north、south、east和west不会隐式地等于0、1、2和3。

关联值

swift的枚举变量可以关联一个任何类型的值,并且类型可以不同
//就是每次创建枚举变量的时候可以关联一个值(就像类的成员变量,关联的值是属于枚举变量自己的)

enum Barcode {
    case upc(Int,Int,Int,Int)
    case qrCode(String)
}

var code     = Barcode.upc(1,2222,3333,5);
 code  = Barcode.qrCode("hahahaahh")
        
 switch code {
 case .upc(let n1, let n2, let n3, let n4):
         print("upc:\(n1),\(n2),\(n3),\(n4)");
 case .qrCode(let product):
         print("QR:\(product)");

第一个枚举关联了一个元祖,第二个关联了一个字符串。

原始值

枚举的原始值有点像类变量,不过不同的是原始值是不能改变的。原始值的意思就是说这个值是属于枚举项,并且不变。也有点儿类似c语言中的宏的作用

enum Planet: Int {
    case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
}
//可以用rawValue来获取枚举项的原始值
let earthsOrder = Planet.earth.rawValue
//3

//可以用原始值来声明枚举变量
let possiblePlanet = Planet(rawValue: 7)


//类似宏的用法,定义了一些固定的常量
enum Constants: Double {
    case π = 3.14159
    case e = 2.71828
    case φ = 1.61803398874
    case λ = 1.30357
}
//圆的面积为
let s = Constants.π.rawValue * r*r / 2

递归枚举

上面说枚举可以关联一个任何类型的值那么自然也可以关联其他枚举类型,甚至可以关联自己类型的枚举实例,把关联自己类型的实例叫做 递归枚举,自己关联自己.
就是枚举变量的关联值还是枚举类型变量。
这种枚举要在前面加上 indirect

indirect enum ArithmeticExpression {
    case number(Int)
    case addition(ArithmeticExpression, ArithmeticExpression)
    case multiplication(ArithmeticExpression, ArithmeticExpression)
}

递归枚举用起来略绕。

        //(5 + 4)*2 可以这样表示
        let five = ArithmeticExpression.number(5)
        let four = ArithmeticExpression.number(4)
        let sum  = ArithmeticExpression.addition(five, four)
        let product = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))
        print(evaluate(product));

    func evaluate(_ expression: ArithmeticExpression) -> Int {
        switch expression {
        case let .number(value):
            return value
        case let .addition(left, right):
            return evaluate(left) + evaluate(right)
        case let .multiplication(left, right):
            return evaluate(left) * evaluate(right)
        }
    }

相关文章

  • C#枚举及与枚举常数的转换

    1、枚举的定义 2、枚举绑定到comboBox 3、枚举常数转换为枚举string转枚举 数字值转枚举

  • Swift 基础笔记 - 枚举

    枚举 OC定义和使用枚举 Swift定义枚举类型 Swift判断枚举类型 枚举成员类型

  • 枚举类

    1.枚举类型的定义: 枚举类型定义的一般形式为 enum 枚举名{//枚举值表枚举值1;枚举值2;...} 在枚举...

  • 10、枚举与闭包

    枚举 枚举和普通类相比有什么优势 枚举类型、枚举名称与枚举值 枚举的比较运算 两个枚举之间可以使用等值比较(==)...

  • Swift与OC的语法简单对比(常用语法二)

    20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...

  • Swift 2 学习笔记 10.枚举

    课程来自慕课网liuyubobobo老师 枚举 枚举基础 枚举之原始值 枚举之关联值 枚举递归

  • swift3语法(八)

    枚举/结构体 枚举 定义形式enum 枚举名 { 枚举值} // 例如enum CompassPoint {...

  • C语言基础 之 枚举类型

    枚举类型 枚举类型: 列出所有可能的值 枚举类型的定义 枚举类型定义的一般格式:enum 枚举类型名 {枚举值表}...

  • 枚举

    枚举 Why:为什么需要枚举 What:枚举是什么; How:枚举怎么实现 When:枚举什么时候使用 Where...

  • 枚举的概念及应用

    一、枚举的概念 二、枚举类型的定义 三、枚举变量的定义 四、枚举使用的注意 五、枚举变量的基本操作 五、枚举变量的...

网友评论

      本文标题:枚举

      本文链接:https://www.haomeiwen.com/subject/niwgpftx.html