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. python为什么不需要重载函数

    https://www.cnblogs.com/erbaodabao0611/p/7490439.html

  2. C# 函数参数中的this

    先看下面的代码: public static class StringExtension { public static void Foo(this string s) { Console.Write ...

  3. ClickHouse 分布式高可用集群搭建(转载)

    一.ClickHouse安装方式: 源码编译安装 Docker安装 RPM包安装 为了方便使用,一般采用RPM包方式安装,其他两种方式这里不做说明. 二.下载安装包 官方没有提供rpm包,但是Alti ...

  4. MySQL Create table as / Create table like

    a.create table like方式会完整地克隆表结构,但不会插入数据,需要单独使用insert into或load data方式加载数据 b.create table as  方式会部分克隆表 ...

  5. php+ tinymce粘贴word

    最近公司做项目需要实现一个功能,在网页富文本编辑器中实现粘贴Word图文的功能. 我们在网站中使用的Web编辑器比较多,都是根据用户需求来选择的.目前还没有固定哪一个编辑器 有时候用的是UEditor ...

  6. RookeyFrame 通用页面 加载数据 原理

    说明: 我是一步一步跳转进去的哈 测试的功能:通用列表页面的普通查询 点一下查询按钮,就能看到请求的地址:/DataAsync/LoadGridData.html 1.DataController - ...

  7. (21)打鸡儿教你Vue.js

    组件化思想: 组件化实现功能模块的复用 高执行效率 开发单页面复杂应用 组件状态管理(vuex) 多组件的混合使用 vue-router 代码规范 vue-router <template> ...

  8. JSP了解点基础

    了解即可: 1.JSP本质: 是将jsp文件解析为java servlet类! 生成.class文件   存放在工程的work文件夹内! 2.注释  <%--   --%>    html ...

  9. java连数据库和数据库连接池踩坑日记(一)-------oracle连接的一些问题

    最近接触oracle有点多,同时也在配置数据库连接池,坑也就踩多了,记录下. 事情还没有结束,没时间记录问题,很多事情都忘了,过了国庆再写的话可能就真的全忘了吧……而且不单单是数据库问题,还有一些数据 ...

  10. hadoop错误记录部分总结

    错误记录与分析 错误1:java.net.BindException: Port in use: localhost:0 datanode节点启动时报错 日志信息如下: Exiting with st ...