• 枚举


    枚举

    • 一般情况
    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() {

    }

  • 相关阅读:
    3年度研发项目情况项目目标文档
    2系统利益相关者描述案例
    讨论结果
    本学期《软件需求分析》需要掌握的内容(个人总结)
    第二周进度条
    四则运算
    第一周进度记录
    java web
    ke tang zuo ye
    2015-05-26 随笔
  • 原文地址:https://www.cnblogs.com/wwjwb/p/13467069.html
Copyright © 2020-2023  润新知