Swift中类和结构体有很多共同点。共同处在于:
- 定义属性用于存储值
- 定义方法用于提供功能
- 定义下标操作使得可以通过下标语法来访问实例所包含的值
- 定义构造器用于生成初始化值
- 通过扩展以增加默认实现的功能
- 实现协议以提供某种标准功能
与结构体相比,类还有如下的附加功能:
- 继承允许一个类继承另一个类的特征
- 类型转换允许在运行时检查和解释一个类实例的类型
- 析构器允许一个类实例释放任何其所被分配的资源
- 引用计数允许对一个类的多次引用
定义语法与实例化
类和结构体有着类似的定义方式。通过class
和struct
来分别表示类和结构体,并在一对大括号中定义他们的具体内容
class myClass{
//类的定义
var width = 0;
var height = 0;
}
let myclass = myClass();//实例化
struct myStruct{
//结构体的定义
var width = 0;
var height = 0;
}
let mystruct = myStruct();//实例化
结构体类型的成员逐一构造器
所有结构体都有一个自动生成的成员逐一构造器,用于初始化新结构体实例中成员的属性。新实例中各个属性的初始化可以通过属性的名称传递到成员逐一构造器之中;
let mystruct = myStruct(width : 100, height : 100);
与结构体不同,类实例没有默认的成员逐一构造器。
类与结构体的类型
- 结构体是值类型
值类型被赋予给一个变量、常量或者被传递给一个函数的时候,其值会被拷贝。
let mystruct = myStruct(width : 100, height : 100);
var newstruct = mystruct;
newstruct.width = 500;
print(newstruct.width);//此时的值为500
print(mystruct.width);//值仍然为100
- 类是引用类型
与值类型不同,引用类型在被赋予一个变量、常量或者被传递到一个函数时,其值不会被拷贝。因此,引用的是已存在的实例本身而不是其拷贝。
class myClass{
var widht = 10;
var height = 10;
}
let myclass = myClass();
var newclass = myclass;
newclass.widht = 50;
print(myclass.widht);//值为50
print(newclass.widht);//值为50