Swift面向对象概述
面向对象的三大特性
- 继承
- 封装
- 多态
基本单元
- 枚举
- 结构体
- 类
- 协议
- 扩展
面向对象概述
- 从整体的功能上看Swift的枚举、结构体、类三者具有完全平等的地位
- Swift的类、结构体、枚举中都可以定义(属性、方法、下标、构造体、嵌套类型)
- 在Swift中,枚举和结构体是值类型的,类是引用类型
类和结构体的相似点
- 定义属性用来存储值
- 定义方法用于提供功能
- 定义下标脚本用来允许使用下标语法访问值
- 定义初始化器用于初始化状态
- 可以被扩展来默认所没有的功能
- 遵循协议来针对特定类型提供标准功能
类和结构体不同点
- 继承允许一个类继承另一个类的特征
- 类型转换允许你在运行检查和解释一个类实例的类型
- 反初始化器允许一个类实例释放任何其所被分配的资源
- 引用计数允许不止一个对类实例的引用
枚举从此站了起来
枚举语法
- 用enum关键字来定义一个枚举,然后将其所有的定义内容放在一个大括号({})中
- 多个成员值可以出现在同一行中,要用逗号隔开
每一个枚举都定义了一个全新的类型。正如Swift中其他的类型那样,它们的名称(例如:CompassPoint和Planet)需要首字母大写。给枚举类型起一个单数的而不是复数的名字,从而使得它们能够顾名思义
使用Switch语句来匹配枚举值
- 你可以用Switch语句来匹配每一个单独的枚举值
遍历枚举的case
- 对于某些枚举来说,如果能有一个集合包含了枚举的所有情况就好了。你可以通过在枚举名字后面写:Caselterable来允许枚举被遍历。Swift会暴露一个包含对应枚举类型所有情况的集合名为allCases
关联值
- 可以定义Swift枚举来存储任意给定类型的关联值,如果需要的话不同枚举成员关联值的类型可以不同
[左边是一个条形码]右边是一个二维码
原始值
- 枚举成员可以用相同类型的默认值预先填充(成为原始值)
预设原始值
- 当你在操作存储整数或字符串原始值枚举的时候,你不必显式地给每一个成员都分配一个原始值。当你没有分配时,Swift将会自动为你分配值
从原始值初始化
- 如果你用原始值类型来定义一个枚举,那么枚举就会自动收到一个可以接受原始值类型的值的初始化器(叫做rawValue的形式参数)然后返回一个枚举成员或者nil。你可以使用这个初始化器来尝试创建一个枚举的新实例
递归枚举
- 递归枚举是拥有另一个枚举作为枚举成员关联值的枚举。当编译器操作递归枚举时必须插入间接寻址层。你可以在声明枚举成员之前使用indirect关键字来明确它是递归的
- 如说表达式(5 + 4) * 2在乘法右侧有一个数但有其他表达式在乘法的左侧