Swift结构体和类
2019-07-27 21:45 iCoderHong 阅读(444) 评论(0) 编辑 收藏 举报Swift结构体
在Swift标准中,绝大多数的公开的类型都是结构体,而枚举和类只占很小的一部分
比如Bool、Int、Double、String、Array、Dictionary等常见的类型都是结构体
Swift定义一个结构体
所有的结构体都有一个编译器自动生成的初始化器 编译器会根据情况,可能会为结构体生成多个初始化器
宗旨是为了保证初始化的结构体所有成员都有初始值
定义的Person结构体,编译器自动生成的初始化器
创建一个Person结构体实例
一旦在自定义结构体时自定义初始化器,编译器就不会载自动生成其它初始化器了
结构体的内存结构
Swift类
类的定义和结构体类似,但是编译器并没有为类自动生成可以传入成员值的初始化构造器
如果类的所有成员都在定义的时候指定了初始值,编译器会为类生成无参的初始化器 成员的初始化是在这个初始化器中完成的
类的实例对象的内存结构
结构体与类的本质区别
- 结构体、枚举都是值类型,类是引用类型
- 值类型赋值给var、let或者给函数传参,是直接将所有内容拷贝一份 产生了全新的副本,属于深拷贝
- 引用赋值给var、let或者给函数传参,是将内存地址拷贝一份,指向的是同一份内存空间,属于浅拷贝
在Swift标准库中,为了提升性能,String、Array、Dictionary、Set采取了Copy On Write的技术,仅当有"写"操作时,才会真正执行拷贝操作
对于标准库值类型的赋值操作,Swift能确保最佳性能,所以没必要为了保证最佳性能来避免赋值
建议:不需要修改的,尽量使用let