Swift中enum(枚举)使用详情

1.枚举语法

1.用enum关键字来定义一个枚举,然后将其所有的定义内容放在一个大括号({})中;
2.多个成员值可以出现在同一行中,要用逗号隔开.

    enum CompassPoint {
        case north
        case south
        case east
        case west
        
    }

2.使用Switch语句来匹配枚举值

你可以使用Switch语句来匹配每一个单独的枚举值.

 let directionToHead = CompassPoint.south
        
        switch directionToHead
        {
        case .north:
            print("11111")
        case .south:
            print("2222")
        case .east:
            print("33333")
        case .west:
            print("4444")
        }


    enum CompassPoint {
        case north
        case south
        case east
        case west
        
    }

3.遍历枚举的case

对于某些枚举来说,如果能够有一个集合包含了枚举的所有情况就好了.你可以通过在枚举名字后面写:CaseIterable来允许枚举被遍历.Swift会暴露一个包含对应枚举类型所有情况的集合名为allCases

        let number = points.allCases.count
        
        for direction in points.allCases {
            
            print(direction)
        }



    enum points :CaseIterable{
        case north
        case south
        case east
        case west
        
    }

4.关联值

        var product = Barcode.upc(8, 85909, 51226, 3)
        print(product)
        product = .qrCode("qwertyuiop")
        print(product)

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

5.原始值

枚举成员可以用相同类型的默认最预先填充(成为原始值).

    enum ASCIIControlChatacter: Character {
        case tab = "\t"
        case lineFeed = "\n"
        case carriageReturn = "\r"
    }

6.预设原始值

当你在操作存储值整数或字符串原始值枚举的时候,你不必显示的给每一个成员都分配一个原始值.当你没有分配时,Swift将会自动为你分配值.

    enum CompassPoint: Int{
        case north = 1,south,east,west
    }

7.从原始值初始化

如果你用原始值类型来定义一个枚举,那么枚举就会自动收到一个可以接受原始值类型的值得初始化器(叫做rawValue的形式参数)然后返回一个枚举成员或者nil.你可以使用这个初始化器来尝试创建一个枚举的新实例.

let directionToHead = CompassPoint(rawValue: 3)

8.递归枚举

递归枚举是拥有另一个枚举作为枚举成员关联值的枚举.当编译器作递归枚举时必须插入间接寻址层.你可以在声明枚举成员之前使用indirect关键字来明确他是递归的.

        let five = ArithmetcExpression.number(5)
        let four = ArithmetcExpression.number(4)
        let sum = ArithmetcExpression.addition(five, four)
        let product = ArithmetcExpression.multiplication(sum, ArithmetcExpression.number(2))
         print(evaluate(product))


   indirect enum ArithmetcExpression {
       
       case number(Int)
       case addition(ArithmetcExpression,ArithmetcExpression)
       case multiplication(ArithmetcExpression,ArithmetcExpression)
    }
    
    func evaluate(_ expression: ArithmetcExpression) -> 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)
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值