第九章 结构体与类
结构体和类其实是一个用通用且灵活的方法来构造代码块的东西。而我们可以用定义常量,变量或函数的方法来定义结构体和类的属性方法,以此来扩展该结构体或类的功能。通常很官方的理解还不如翻译成自己的白话文容易理解很概念性的东西。
1. Comparing Structures and Classes (结构体和类的对比)
结构体和类的相同点:
- 定义属性用于存储值
define properties to store values - 定义方法用于提供功能
define methods to provide functionality - 定义下标操作使得可以通过下标语法来访问实例所包含的值
define subscripts to provide access to their values using subscript syntax - 定义初始化用于生成初始化值
define initialisers to set up their initial state - 通过扩展以增加默认实现的功能
be extended to expand their functionality beyond a default implementation - 实现协议以提供某种标准功能
conform to protocols to provide standard functionality of a certain kind
相比结构体,类有下面这些额外的优势:
- 继承 :允许一个类继承另一个类的特征
Inheritance enables one class to inherit the characteristics of another - 类型转换允许在运行时检查和解释一个类实例的类型
Type casting enables you to check and interpret the type of a class instance at runtime. - 析构器允许一个类实例释放任何其所被分配的资源
Deinitializers enable an instance of a class to free up any resources it has assigned. - 引用计数允许对一个类的多次引用
Reference counting allows more than one reference to a class instance.
1.1 定义结构体和类的语法
定义结构体(structure)和类(class)的方法其实是比较相似的。用struct
和class
关键字分别引出介绍该结构体和类。结构体和类的定义内容需要放在大括号内
struct SomeStructure {
// 这里是结构体的定义
// 结构体的名称(SomeStructure)要大些
}
class SomeClass {
// 这里是类的定义
}
不管什么时候定义结构体或者类的时候都要用大写结构体或类的名称,命名结构体或类时等于说创建了一个新的swift 类型,用大写的原因是因为我们要匹配swift 类型(String Bool …)的命名规则,而在定义属性或方法的时候要用小写。注意区分。。。
下面是一个定义结构体和类的实例,从该例子中可以隐约看到结构体和类的共同点和不同点
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {