加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift 个人学习笔记 - 07: 枚举

发布时间:2020-12-14 06:24:04 所属栏目:百科 来源:网络整理
导读:本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的地方,我会以“存疑”的注解指出。 在此感谢中文版翻译者,这极大

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考

以下还是有很多没看懂、不确定的地方,我会以“存疑”的注解指出。

在此感谢中文版翻译者,这极大地加快了 Swift 的学习速度。

本文地址:http://www.52php.cn/article/p-vbgocblq-d.html


Reference:

原版:The Swift Programming Language
中文版:Swift 3 编程语言 - 枚举

枚举

Swift 中的枚举不需要对应真实的值。枚举的值可以是 String,Character,Integer,Float等类型。同时,枚举中的一个值可以与多个类型相关联起来。

基本语法:

enum CompassDirection {
        case north
        case south
        case east
        case west
    }

初始化和赋值:

var dirToHead = CompassDirection.west
    dirToHead = .east

注意值处理都需要在前面加上 “.”。这里实际上是隐式省略了 “CompassDirection”。

需要注意的是,如果将 enum 用在 switch 语句中,需要全覆盖所有的值。

关联值

enum Barcode {
        case upc(Int,Int,Int)
        case qrCode(String)
    }

上面这段语法的意思是:定义一个叫做 Barcode 的数值类型,它要么用 (Int,Int) 类型的关联值截取 upc 值,要么使用 String 类型的关联值街区一个 qrCode 值。

赋值:

var productBarcode = Barcode.upc(8,85907,51226,3)
    productBarcode = .qrCode("ABCDEFG")

Swift 写法:

switch productBarcode {
    case .upc(let numberSystem,let manufacturer,let product,let check):
        print("UPC: (numberSystem),(manufacturer),(product),(check).")
    case .qrCode(let productCode):
        print("QR code: (productCode).")
    }

如果变量里面统一是使用 let 或者统一使用 var,那么可以简写成一个:

switch productBarcode {
    case let .upc(numberSystem,manufacturer,product,check):
        print("UPC : (numberSystem),(check).")
    case let .qrCode(productCode):
        print("QR code: (productCode).")
    }

原始值

enum ASCIIControlCharacter: Character {
        case tab = "t"
        case lineFeed = "n"
        case carriageReturn = "r"
    }

上面的例子告诉我们,可以指定 enum 的原始值类型。

如果没有给 enum 显示指定值类型,那么 Swift 会默认将每个值的原始值设置为其名字本身的 String 类型。
也可以像 C 那样,使用整型值,也可以自动排序下来。如下:

enum Planet: Int {
        case mercury = 1,venus,earth,mars,jupiter,saturn,uranus,neptune
    }

这个时候,我们会涉及到一个构造方法:rawValue。参见以下初始化:

let possiblePlanet = Planet(rawValue: 7)

注意,此时的 possiblePlanet 变量类型是 “Planet?”,注意其中的问号。因为使用 rawValue 初始化 enum,可能得到一个非法值。上面这一句,变量的值是 nil

递归变量

暂时不看。需要注意的是 indirect 关键字。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读