Swift开篇006->枚举

前端之家收集整理的这篇文章主要介绍了Swift开篇006->枚举前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

PART_A 枚举简介

  1. 定义:一组相关的值定义了一个共同的枚举类型

  2. 语法格式

    enum@H_404_21@ Direction {
        case@H_404_21@ East
        case@H_404_21@ South
        case@H_404_21@ West
        case@H_404_21@ North
        case@H_404_21@ NorthWest,EastSouth // 多个成员值在一行时,可用逗号分开@H_404_21@
    }
  3. 类型推断

    var@H_404_21@ currentDirection = Direction.East 
    
    // 当类型已被推断出,可用简短语句(省略枚举类型名)来设置值:._@H_404_21@
    currentDirection =.South
  4. 使用Switch匹配枚举值

    • switch需要穷举枚举成员,可以使用default分支来涵盖所有未明确处理的枚举成员

      var@H_404_21@ currentDirection = Direction.East           
          switch@H_404_21@ currentDirection {
          case@H_404_21@ .East:
              print@H_404_21@("East"@H_404_21@)
          case@H_404_21@ .South:
              print@H_404_21@("South"@H_404_21@)
          case@H_404_21@ .West:
              print@H_404_21@("West"@H_404_21@)
          case@H_404_21@ .North:
              print@H_404_21@("North"@H_404_21@)
          case@H_404_21@ .NorthWest,.EastSouth:
              print@H_404_21@("Other"@H_404_21@)
          default@H_404_21@:
              print@H_404_21@("Default"@H_404_21@)
          }

PART_B 关联值

  1. 定义:将枚举成员使用元组组合成关联值

  2. 注意:同一变量可被分配成不同类型的关联值,但同一时刻仅能存储为一种类型

  3. 语法格式

    enum Person {
        case@H_404_21@ Male(String@H_404_21@,Int)
        case@H_404_21@ Female(String@H_404_21@,String@H_404_21@)
    }
    
    func test() {
        var@H_404_21@ p1 = Person.Male("zhangsan"@H_404_21@,28@H_404_21@)
    
        switch@H_404_21@ p1 {
        case@H_404_21@ .Male(let@H_404_21@ name,let@H_404_21@ age):
            print("\(name),\(age)"@H_404_21@)
    
        // 元组成员类型相同时,可提出类型至case后面@H_404_21@
        case@H_404_21@ let@H_404_21@ .Female(name,desc): 
            print("\(name),\(desc)"@H_404_21@)
        }
    }

PART_C1 原始值:原始值的类型必须相同

  1. 定义:即默认值. 对于一个特定的枚举成员,其原始值始终不变

  2. 说明

    • 原始值类型可为字符、字符串、任意整型值、任意浮点型值

    • 每个原始值在枚举声明中必须是唯一的

    • 系统提供方法获取原始值:rawValue

  3. 语法格式

    enum@H_404_21@ OriginStr: String {
        case@H_404_21@ str1 = "hi"@H_404_21@
        case@H_404_21@ str2 = "how are you"@H_404_21@
    }

PART_C2 原始值的隐式赋值

  1. 当使用整数作为原始值,隐式赋值依次递增1. 若第一个枚举成员未设置原始值,默认为0

  2. 当使用字符串作为原始值,每个枚举成员的隐式原始值为该枚举成员的名称

    // 枚举类型一、星球(整型)@H_404_21@
    enum@H_404_21@ Planet: Int {
        case@H_404_21@ Mercury = 1@H_404_21@,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune
    }
    
    // 枚举类型二、方位(字符串)@H_404_21@
    enum@H_404_21@ CompassPoint: String {
        case@H_404_21@ North,South,East,West
    }
    
    // 使用 rawValue 取默认原始值@H_404_21@
    let@H_404_21@ earthsOrder = Planet.Earth.rawValue // earthOrder 值为 3@H_404_21@
  3. 使用原始值初始化枚举实例

    let@H_404_21@ possiblePlanet = Planet(rawValue: 7@H_404_21@)
    // possiblePlanet类型为可选值:Planet?@H_404_21@
    // 越界将返回 nil,否则将对应星球赋值给 possiblePlanet@H_404_21@

PART_D 递归枚举(indirect):情况可被穷举时,适合数据建模

以下为解决案例:(3 + 4) * 5

  1. 定义

    • 方式一

      enum@H_404_21@ ArithmeticExpression {
          case@H_404_21@ Num(Int)
          indirect case@H_404_21@ Add(ArithmeticExpression,ArithmeticExpression)
          indirect case@H_404_21@ Multiple(ArithmeticExpression,ArithmeticExpression)
      }
    • 方式二:所有成员可递归时,将 indirect 放在 enum 声明前

      indirect enum@H_404_21@ ArithmeticExpression2 {
          case@H_404_21@ Num(Int)
          case@H_404_21@ Add(ArithmeticExpression,ArithmeticExpression)
          case@H_404_21@ Multiple(ArithmeticExpression,ArithmeticExpression)
      }
      // 定义运算方法@H_404_21@
      func test(expression: ArithmeticExpression) -> Int {
          switch@H_404_21@ expression {
          case@H_404_21@ let@H_404_21@ .Num(value@H_404_21@):
              return@H_404_21@ value@H_404_21@
          case@H_404_21@ let@H_404_21@ .Add(a,b):
              return@H_404_21@ test11(a) + test11(b)
          case@H_404_21@ let@H_404_21@ .Multiple(a,b):
              return@H_404_21@ test11(a) * test11(b)
          }
      }
      // 调用运算方法、递归枚举进行运算
      let three@H_404_21@ = ArithmeticExpression.Num(3@H_404_21@)
      let four@H_404_21@ = ArithmeticExpression.Num(4@H_404_21@)
      let sum@H_404_21@ = ArithmeticExpression.Add(three@H_404_21@,four@H_404_21@)
      let result@H_404_21@ = ArithmeticExpression.Multiple(sum@H_404_21@,ArithmeticExpression.Num(5@H_404_21@)) // result 值为 35@H_404_21@

@H_803_403@ 以上。如有错误和疑问,欢迎指正提出。 catface.wyh@gmail.com

猜你在找的Swift相关文章