15.Swift学习之枚举

枚举介绍

  • 概念介绍
    • 枚举定义了一个通用类型的一组相关的值,可以在代码中以一个安全的方式来使用这些值
    • Swift中的枚举是一等类型, 它可以像类和结构体一样增加属性和方法
    • 在 C/OC 语言中枚举指定相关名称为一组整型值,而Swift 中的枚举更加灵活,不必给每一个枚举成员提供一个值,Swift 中的枚举可以提供的值类型有:字符串,字符,整型值,浮点值等
    • Swift 中的枚举可以包含方法
  • 枚举类型的语法
    • 使用enum关键词并且把它们的整个定义放在一对大括号内
enum SomeEnumeration {
// enumeration definition goes here
}
enum Method{
    case Add
    case Sub
    case Mul
    case Div
}
switch (Method.Add){
    case Method.Add:
        print("加法")
    case Method.Sub:
        print("减法")
    case Method.Mul:
        print("除法")
    case Method.Div:
        print("乘法")
    default:
        print("都不是")
}

枚举的定义

  • 定义方式一
    • case关键词表明新的一行成员值将被定义
    • 不像 C 和 Objective-C 一样,Swift 的枚举成员在被创建时不会被赋予一个默认的整数值
    • 下面的例子中,North,South,East和West不是隐式的等于0,1,2和3
enum CompassPoint {
  case North
  case South
  case East
  case West
}
  • 定义方式二:多个成员值可以出现在同一行上
enum Planet {
  case Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}

枚举赋值

  • 枚举类型赋值可以是字符串/字符/整型/浮点型
    • 如果有给枚举类型赋值,则必须在枚举类型后面明确说明具体的类型
enum CompassPoint : Int {
  case North = 1
  case South = 2
  case East = 3
  case West = 4
}

enum CompassPoint : Double {
  case North = 1.0
  case South = 2.0
  case East = 3.0
  case West = 4.0
}

enum CompassPoint : Double {
  case North = "North"
  case South = "South"
  case East = "East"
  case West = "West"
}

枚举的原始值

  • C/OC中枚举的本质就是整数,所以C/OC中的枚举是有原始值的,默认是从0开始,而Swift中的枚举默认是没有原始值的, 但是可以在定义时告诉系统让枚举有原始值
  • 注意:
    • 原始值区分大小写
    • 返回的是一个可选值,因为原始值对应的枚举值不一定存在
    • 如果想指定原始值之后,后面的元素值默认+1 , 枚举一定是 Int 类型,如果不是Int类, 必须给所有枚举值赋值, 因为不能自动递增
enum Planet {
  case Mercury = 1, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune
}

let p = Planet(rawValue: 3)

if let p = p {
    switch p {
    case .Mercury:
        print("Mercury")
    case .Venus:
        print("Venus")
    case .Earth:
        print("Mercury")
    case .Mars:
        print("Mars")
    case .Jupiter:
        print("Jupiter")
    case .Saturn:
        print("Saturn")
    case .Uranus:
        print("Uranus")
    case .Neptune:
        print("Neptune")
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏西二旗一哥

iOS - Dissecting objc_msgSend on ARM64

我们的朋友 ldp 又出现了。这回它读取了 x12 中指针,这个指针指向了要查找的bucket。每个bucket包含了一个选择器和一个 IMP 。 x9 现在包...

14340
来自专栏Pythonista

第一篇:初始Golang

编程语言已经非常多,偏性能敏感的编译型语言有 C、C++、Java、C#、Delphi和Objective-C 等,偏快速业务开发的动态解析型语言有PHP、Py...

22820
来自专栏落影的专栏

十分钟接入iOS 12新特性——Siri Shortcuts

Xcode 10已经正式发布,开发者可以接入Siri Shortcuts的iOS 12新特性。 WWDC2018的Introduction to Siri S...

20540
来自专栏海天一树

我是如何成为一名少儿编程竞赛老师的

2017年9月,我以前一个同事问我能不能教他小孩Theo学习编程,因为以前在同一家公司时,我那同事经常带Theo去公司,我和Theo也认识,所以我答应了。

31340
来自专栏落影的专栏

鹅厂的成长收获

毕业之后在上海、成都、上海的城市中徘徊,每一次城市迁徙都带我许多的烦恼; 于是在2017年初时,我回到了深圳,选择加入当时对我来说是神秘的存在——腾讯。 至...

35220
来自专栏iOS 开发杂谈

浅谈第三方 SDK 和自定义 crash 上报冲突问题

在开发 iOS 应用,解决 Crash 问题始终是一个难题。Crash 分为两种,一种是由 EXC_BAD_ACCESS 引起的,原因是访问了不属于本进程的内存...

31320
来自专栏老九学堂

C 语言:我不是针对谁,我是说在座的都是乐色

从上世纪七十年代开始,许多编程语言都曾受到程序员的青睐。尽管这些语言很好、很有用,但从高级语言开始学习的人在编程知识方面都有许多遗漏。

14520
来自专栏Alan's Lab

Cordova 是什么

给两个链接: - webView:shouldStartLoadWithRequest:navigationType: public void addJavas...

37430
来自专栏一“技”之长

GCC编译过程记 原

      对于编程工作者来说,GCC是一个熟悉的名字,它的全称是“GNU Compiler Collection”。GCC是一组编译器集合,目前其支持C、C+...

16020

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励