Swift开篇006->枚举

原创 2016年05月31日 09:09:44

PART_A 枚举简介

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

  2. 语法格式

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

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

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

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

PART_B 关联值

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

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

  3. 语法格式

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

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

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

  2. 说明

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

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

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

  3. 语法格式

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

PART_C2 原始值的隐式赋值

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

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

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

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

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

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

  1. 定义

    • 方式一

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

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

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

版权声明:本文为博主原创文章,如需转载请声明作者信息,谢谢。 举报

相关文章推荐

Swift基础篇——枚举

枚举 import Foundation /* Swift枚举: Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像类和结构体一样增加属性和方法 格式: enum ...

Swift 枚举Enumerations

Swift里面的枚举和C,OC里面的最大区别是多了一个case. 枚举表达式 enum SomeEnumeration { // enumeration definition goes h...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

swift枚举

原文出自:标哥的技术博客 前言枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来使用这些值,当然还有一个很重要的是它可能智能提示。在C语言中,枚举会为一组整型值分配相关联的...

swift之枚举

在C语言中枚举名和一个整型值相对应 Swift中的枚举更加灵活,不必给每⼀个枚举成员提供⼀个值。如果给枚举成员提供⼀个值(称为“原始”值),则该值的类型可以是字符串,字符,或是⼀个整型值或浮点数。 ...

Swift 枚举

感谢原作者 链接:http://www.cocoachina.com/newbie/basic/2014/0611/8771.html 枚举定义了一个通用类型的一组相关的值,使你可以在你的代...

Swift枚举

1、枚举的定义 枚举定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这些值。 每个枚举定义了一个全新的类型。像 Swift 中其他类型一样,它们...

Swift 枚举(七)

枚举 1.枚举语法 用enum并把定义放在大括号内,枚举中被定义的值是枚举的成员,case关键字表示新定义的一个成员 enum SomeEnumeration {     // enu...

Swift枚举(Enumerations)

枚举是一组相关的值的集合,并允许你在代码中使用。枚举允许所有的值是相同类型的,也可以是不同类型的,还可以为这些值设置默认值。

[Swift]枚举

1. Swift的枚举的最简单定义:     1)

swift的枚举

An enumeration defines a common type for a group of related values and enables you to work with thos...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)