结构体和类的本质区别
![](https://img.haomeiwen.com/i1154538/513cfa862a3bf47e.jpg)
值类型的赋值是深拷贝。
在swift标准库中为了提升性能,对于系统中的String、Array、Dictionary采取了Copy On Write技术,只有当被拷贝的数据发生变化时才进行深拷贝(联想OC中的copy)。
如果初始化后需要改变成员变量的值,class不必声明成可变类型,而struct必须声明称可变类型。
![](https://img.haomeiwen.com/i1154538/4815187dbae453da.jpg)
结构体
![](https://img.haomeiwen.com/i1154538/bc9fd137354e271f.jpg)
![](https://img.haomeiwen.com/i1154538/f51b9076789ae5d8.jpg)
必须保证所有的成员都有值。
如果某个成员是可为nil的,且是var类型则初始化时不必赋值
类和结构体的成员变量如果都是var类型且是可为空的则不必所有成员变量都初始化
一旦自定义了结构体的初始化器,那么系统就不再为这个结构体生成其他的初始化器。
![](https://img.haomeiwen.com/i1154538/d519b3a4f96a45e5.jpg)
结构体会自定为我们生成带有成员变量的初始化器,而类不会,需要我们手动添加
类
![](https://img.haomeiwen.com/i1154538/506588ec4e828202.jpg)
![](https://img.haomeiwen.com/i1154538/3917a4ef6f072a76.jpg)
网友评论