1.结构体和类的对比
1.1 相同点:
- 定义属性用于储存值
- 定义方法用于提供功能
- 定义下标用于通过下标语法访问值
- 定义初始化器用于生成初始化值
- 通过扩展以增加默认实现的功能
- 符合协议以对某类提供标准功能
1.2 不同点: - 继承允许一个类继承另一个类的特征
- 类型转换允许在运行时检查和解释一个类实例的类型
- 取消初始化器允许一个类实例释放任何其所被分配的资源
- 引用计数允许对一个类的多次引用
2.定义
//结构体的定义
struct Resolution {
var width = 0
var heigth = 0
}
//类的定义
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
3.实例的生成
let someResolution = Resolution()
let someVideoMode = VideoMode()
4.结构体类型的成员逐一初始化器
所有结构体都有一个自动生成的成员逐一初始化器,用于初始化新结构体实例中成员的属性。新实例中各个属性的初始值可以通过属性的名称传递到成员逐一初始化器之中:
let vga = resolution(width:640, heigth: 480)
与结构体不同,类实例没有默认的成员逐一初始化器。
5.属性访问:点语法
6.类和结构体的选择
符合一条或多条以下条件时,请考虑构建结构体:
结构体的主要目的是用来封装少量相关简单数据值。
有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
结构体不需要去继承另一个已存在类型的属性或者行为。