1.枚举类型:

“Swift编程语言中,枚举类型属于值类型,而不是引用类型。”

摘录来自: “大话Swift 4.0”。 iBooks.

2.枚举类型和枚举对象的定义:

enum Enumeration {
case value1
case value2
case value3; case value4, value5
case value6
}

3.指定基本类型和原生值:

/// 将IntEnum指定为Int类型
enum IntEnum: Int {
case zero
case one = , two, three
case six = , seven, eight
}
 
print("one = \(IntEnum.one.rawValue)") var one = IntEnum(rawValue: 0)
if let o = one {
printf("one is: \(o)")
printf("one value is: \(o.rawValue)")
}

4.枚举关联值:

/// 这里定义了一个枚举MyTestEnum,
/// 它枚举case中含有关联值
enum MyTestEnum {
/// 这里的value1具有一个Void类型的关联值
case value1(Void)
 
/// 这里的value2具有一个Int类型的关联值
case value2(Int)
 
/// 这里的value3具有Float、Int、Void与String
/// 这四个类型的关联值
case value3(Float, Int, Void, String)
 }

/// 这里用的关联值为10
let e2 = MyTestEnum.value2(10)

5.递归枚举:

“如果一个枚举类型中某一枚举case的其中一个关联值的类型为该枚举类型本身,那么我们称之为递归枚举”

摘录来自: “大话Swift 4.0”。 iBooks.

enum MyEnum {
 
/// 这里value1不指示对它插入间接层,
/// 因为其关联值不是该枚举类型本身
case value1(Int)
 
/// 对value2插入间接层,
/// 因为其关联值为该枚举类型本身
indirect case value2(MyEnum)
}
 
/// 这里在IndrectEnum枚举前直接添加indirect关键字,
/// 使得这里面所有的枚举case都插入了间接层。
/// 此时该枚举中的所有枚举case前都不能再放indirect关键字了
indirect enum IndrectEnum {
case value1(Int)
case value2(MyEnum)
}

6.枚举中的属性和方法:

/// 这里定义了一个FoodAndDrink枚举
enum MyEnum {
 
case one(Int)
case two(Int)
case three(Int)
 
/// 在枚举中可以定义初始化器
init() {
// 这里默认将当前枚举对象的值作为one枚举值,
// 其关联值为0
self = .one()
}
 
/// 这里定义了一个实例方法fetchValue,
/// 用于萃取当前枚举值的关联值
func fetchValue() -> (Int, String) {
switch self {
case let .one(value):
return (value, "one")
 
case .two(let value):
return (value, "two")
 
case .three(let value):
return (value, "three")
}
}
 
/// 这里定义了一个类型方法,
/// 根据输入参数的值来返回相应的枚举值
static func makeEnum(with value: Int) -> MyEnum {
switch value {
case ..< :
return .one(value)
 
case ..< :
return .two(value)
 
default:
return .three(value)
}
}
 
/// 这里定义了一个计算式实例属性,
/// 将当前枚举值设置为two枚举值,
/// 并带有指定的关联值
var computedProperty: Int {
set(i) {
self = .two(i)
}
 
get {
return self.fetchValue().
}
}
 
/// 这里定义了一个存储式类型属性
static var storedTypeProperty: Int =
 
/// 这里定义了一个计算式类型属性
static var comutedTypeProperty: Int {
set(i) {
storedTypeProperty = i
}
 
get {
return storedTypeProperty
}
}
}
 
func process[…]

Swift4.0复习枚举的更多相关文章

  1. Swift4.0复习特性、编译标志和检查API的可用性

    1.Swift中的特性: @引出,后面紧跟特性名,圆括号带参数即可. @attribute(args) avaiable: 指明对象,函数,类型的可用性. @available(iOS 10.0, m ...

  2. Swift4.0复习访问控制与作用域

    1.访问等级: open: 可以继承,可以重写. public: “public 访问等级能用于修饰所有文件作用域的函数.对象.协议.枚举.结构体.类以及各种类型中的属性与方法.用 public 所修 ...

  3. Swift4.0复习错误处理

    1.Swift中错误的表示: “在Swift中如果我们要定义一个表示错误的类型非常简单,只需遵循 Error 协议即可.我们通常用枚举或结构体类型来表示错误类型,当然枚举可能用得更多些,因为它能更直观 ...

  4. Swift4.0复习扩展

    1.扩展计算式属性: 2.对方法进行扩展: /// 定义枚举类型Light, /// 它指定了基本类型String enum Light: String { case red = "red& ...

  5. Swift4.0复习类

    1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...

  6. Swift4.0复习协议

    1.协议的定义: /// 定义一个协议MyProt protocol MyProt {   /// 声明了一个实例方法foo, /// 其类型为:() -> Void func foo()   ...

  7. Swift4.0复习结构体

    1.基本语法: /** 定义了一个结构体 */ struct Structure {   /// 一个常量存储式实例属性, /// 并直接为它初始化 let constProperty =   /// ...

  8. Swift4.0复习基本语法简介

    1.五种类型: 包含五种类型——枚举(enum).结构体(struct).类(class).协议( protocol)以及函数类型(function types). 2.变量对象:var 3.常量对象 ...

  9. Swift4.0复习类型定义、类型投射等操作

    1.类型定义: /// 这里将MyInt定义为Int32类型 typealias MyInt = Int32   /// 这里将MyArrayInt定义为[MyInt]数组类型 typealias M ...

随机推荐

  1. ip address control获取ip字符串

    1.环境:vs2010 & 默认项目字符集(貌似是unicode) 2.首先为ip address control添加control类型变量m_ipaddressedit, BYTE ips[ ...

  2. sql server 视图的用法

    Sql server中 如何用sql语句创建视图 1.视图的作用 视图的作用: 第一点:使用视图,可以定制用户数据,聚焦特定的数据. 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例 ...

  3. Java使用IE浏览器下载文件,文件名乱码问题

    String userAgent = request.getHeader("user-agent").toLowerCase(); if (userAgent.contains(& ...

  4. mysql5.7的手动安装

    1.安装必要的组件    | yum install –y autoconf automake imake libxml2-devel expat-devel cmake gcc gcc-c++ li ...

  5. 五.划分LVM逻辑卷

    作用:    1.整合分散的空间    2.空间可以进行扩大   零散空闲存储 ---- 整合的虚拟磁盘 ---- 虚拟的分区   由众多的物理卷(PV)组合成卷组(VG),从卷组中划分多个逻辑卷(L ...

  6. bg/fg/jobs

    用于将某个任务放置后台运行,一般会与 ctrl+ z , fg, & 符号联用. 典型的场景就是将耗时的任务放于后台运行,例如打包某个占用空间大的目录,

  7. loj #2053 莫队

    \(des\) 存在一个长度为 \(n\) 的数字 \(s\), 一个素数 \(P\) \(m\) 次询问一段区间 \([l, r]\) 内的子串构成的数是 \(P\) 的倍数 \(sol\) 对于一 ...

  8. 如何下载SlideShare的PPT:2种方法

    SlideShare中有很多不错的PPT,有时候确实想收藏怎么办,通常有2种方法: 1.SWF档案的PPT A. 打开PPT首页,按ctrl+U打开源码B. 找到类似以下语法的语句: <meta ...

  9. 36、将RDD转换为DataFrame

    一.概述 为什么要将RDD转换为DataFrame? 因为这样的话,我们就可以直接针对HDFS等任何可以构建为RDD的数据,使用Spark SQL进行SQL查询了.这个功能是无比强大的. 想象一下,针 ...

  10. UOJ449. 【集训队作业2018】喂鸽子 [概率期望,min-max容斥,生成函数]

    UOJ 思路 由于最近养成的不写代码的习惯(其实就是懒),以下式子不保证正确性. 上来我们先甩一个min-max容斥.由于每只鸽子是一样的,这只贡献了\(O(n)\)的复杂度. 现在的问题转化为对于\ ...