Swift中struct和class的区别

struct

值类型,深拷贝,分配在栈上
没有析构函数
不能继承
不会发生内存泄漏,线程安全

class

引用类型,浅拷贝,分配在堆上
有析构函数
可以继承
可以有单例
每一个成员变量都必须初始化

相同点

操作符函数、泛型、协议采纳、观察器

Tips

OC里面无法调用Swift里的struct,因为要在OC里调用Swift代码的话,对象需要继承自NSObject。
struct不能被序列化成NSData,不能归解档,class可以,因为归解档的类必须遵守NSCoding协议,而NSCoding只适用于继承自NSObject的类,struct不能遵守NSCoding协议。

解决方案:
定义一个protocol,包含两个方法:
1.从结构体中得到一个NSDictionary对象
2.使用一个NSDictionary对象实例化结构体
NSDictionary可以使用NSKeyedArchiver进行序列化
好处:
所有遵守该协议的结构体都可以被序列化

struct在方法里修改Property的时候,需要加上mutating,class不需要。
struct是静态派发

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容