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. 有关 Java (jackson包问题 ,MappingJacksonHttpMessageConverter 和 MappingJackson2HttpMessageConverter问题)

    今天这一系列问题吃掉我四个小时,所以现在吸收掉. 一. 整理所有错误信息: 1.错误信息:java.lang.NoClassDefFoundError: Could not initialize cl ...

  2. Vue模板语法(一)

    Vue模板语法 一 vue简介 Vue.js是一套构建用户界面的渐进式框架. 与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计. Vue 的核心库只关注视图层,并且非常容易学习,非常容易与 ...

  3. C void的指针 强制类型转换(int*)p 把变量指针p强制转换成指向int类型的指针

    #include <stdio.h> int main(void){ void *p; int a = 14322; char c ='A'; p = &a; //p = & ...

  4. 洛谷 P2010 回文日期 题解

    P2010 回文日期 题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日 ...

  5. SVN优于CVS之处

    1.原子提交.一次提交不管是单个还是多个文件,都是作为一个整体提交的.在这当中发生的意外例如传输中断,不会引起数据库的不完整和数据损坏. 2.重命名.复制.删除文件等动作都保存在版本历史记录当中. 3 ...

  6. BAT 删除超过xx天的文件

    @echo offecho 删除n天前的备分文件和日志forfiles /p "C:\ShareF" /m *.zip /d -7 /c "cmd /c del @pat ...

  7. python 两个字典对比

    def commir_two_dict(dictone,dicttwo): pass_num=0 fail_num=0 try: for i in dictone.keys(): if i in di ...

  8. UML图中时序图的基本用法

    快速阅读 序列图主要用来更直观的表现各个对象交互的时间顺序,将体现的重点放在 以时间为参照,各个对象发送.接收消息,处理消息,返回消息的 时间流程顺序,也称为时序图. 里面用到的基本元素如下: 角色- ...

  9. CentOS7如何将Docker升级到最新版

    1.查找主机上关于Docker的软件包 # rpm -qa | grep docker – – 列出包含docker字段的软件的信息 docker-ce--.el7.x86_64 docker-ce- ...

  10. Understanding Action Filters (C#) 可以用来做权限检查

    比如需要操作某一张表league的数据,multi-tenancy的模式,每一行数据都有一个租户id的字段. 那么在api调用操作的时候,我们需要检查league的id,是否和当前用户所属的租户信息一 ...