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 中枚举高级用法及实践

title: "Swift 中枚举高级用法及实践" date: 2015-11-20 tags: [APPVENTURE] categories: [Swift 进阶] permalink: ...
  • imxiangzi
  • imxiangzi
  • 2016年05月04日 17:07
  • 10909

Swift学习之十六:枚举(Enumeration)

Swift中的枚举与C、OC中的枚举有很大的区别,增加了原来类中ft
  • woaifen3344
  • woaifen3344
  • 2014年06月09日 20:20
  • 4002

Swift学习笔记 - 位移枚举的按位或运算

在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分/...
  • wang631106979
  • wang631106979
  • 2016年08月30日 15:16
  • 3600

【数据结构与算法006】基本概念和枚举算法

算法绪论和枚举算法
  • DaveBobo
  • DaveBobo
  • 2016年11月14日 10:29
  • 592

L1-006. 连续因子(枚举因子)

题目链接:https://www.patest.cn/contests/gplt/L1-006 思路分析:首先可以想到以O(sqrt(n))的复杂度求出所有因子。然后排序,这样问题就转化为求一个数组...
  • u013615904
  • u013615904
  • 2016年05月16日 10:58
  • 2727

Swift视频教程 枚举的定义和语法

  • 2015年08月31日 15:46
  • 31.76MB
  • 下载

swift菜鸟入门视频教程-08-枚举

  • 2014年06月30日 23:27
  • 26KB
  • 下载

swift的基本使用(5)类和枚举

//: Playground - noun: a place where people can playimport UIKit//枚举 //enum 枚举名: 类型{ // case 分...
  • sun_chenglei
  • sun_chenglei
  • 2015年09月08日 19:15
  • 97

学校学习ios教程笔记,第五节swift中的字典以及枚举的概念与操作和初识函数

// // main.swift // 练习 // // Created by SZT on 2016/10/25. // Copyright © 2016年年 SZT. All rights res...
  • qq_35825204
  • qq_35825204
  • 2016年10月26日 14:00
  • 153

The Swift Programming Language学习笔记(九)——枚举

枚举 枚举语法 使用switch语句匹配枚举值 关联值 原始值 原始值的隐式赋值 使用原始值初始化枚举实例 递归枚举 枚举枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来...
  • a1546488968
  • a1546488968
  • 2016年02月22日 18:33
  • 255
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Swift开篇006->枚举
举报原因:
原因补充:

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