zoukankan      html  css  js  c++  java
  • 枚举

    枚举

    • 一般情况
    enum Sorce {
        case y
        case x
    }
    let direction: Sorce = .x
    
      结果:
    
     x
    
    • rawValue
     enum Direction: String {
              case north = "N"
              case south = "S"
              case east  = "E"
              case west  = "W"
    }
    print(Direction.north, Direction.north.rawValue)
    

    结果:

    north N
    

    更加复杂一点

    enum Direction: String {
        case north
        case sourth = "S"
        case east  = "E"
        case west  = "W"
        
    }
    let Move = Direction.north
    switch Move {
        case .north: print("north")
        case .sourth: print("sourth")
        case .east: print("east")
        case .west: print("west")
    }
    print(Direction.north, Direction.north.rawValue, Direction.sourth, Direction.sourth.rawValue)
    

    总结

    enum Direction: String {
    	case north, south, east, west
     }
    
    • 关联值
    enum Sorce {
        case points(Int)
        case grade(Character)
    }
    
    let sorceA: Sorce = .points(15)
    let sorceB: Sorce = .grade("A")
    print(sorceA, sorceB)
    switch sorceA {
        case let .points(point): print(point)
        case let .grade(char): print(char)
    }
    
    

    结果:

    points(15) grade("A")
    15
    

    递归枚举

    indirect enum ArithExpr {
        case number(Int)
        case sum(ArithExpr, ArithExpr)
        case difference(ArithExpr, ArithExpr)
    }
    func sumVale(_ expression: ArithExpr) -> Int {
        switch expression {
        case let .number(value):
            return value
        case let .sum(value1, value2):
            return sumVale(value2) + sumVale(value1)
        case let .difference(left, right):
            return  sumVale(left) - sumVale(right)
        }
    }
    
    let value1 = ArithExpr.number(10)
    let value2 = ArithExpr.number(20)
    let A = sumVale(ArithExpr.sum(value1, value2))
    let B = sumVale(ArithExpr.difference(value2, value1))
    print(A, B, sumVale(value1), sumVale(value2), value1, value2)
    
    

    结果
    30 10 10 20 number(10) number(20)

    @inline

    //永远不会被内联 (即使开启了编译器优化)
    @inline(never) fun test() {

    }

    //开启编译器优化后, 即使代码很长, 也会被内联 (递归, 动态派发除外)
    @inline(_always) func test() {

    }

  • 相关阅读:
    python ORM的使用
    python写入mysql
    远程连接不上centos的mysql的解决方法
    linux上mysql的安装
    缓存模块redis
    topic模式下的收发
    direct模式下的收发
    广播模式下的生产者与消费者fanout模式
    [HNOI2008]玩具装箱TOY
    [NOI2009]二叉查找树
  • 原文地址:https://www.cnblogs.com/wwjwb/p/13467069.html
Copyright © 2011-2022 走看看