知识卡片

类和结构体的根本分野是值语义与引用语义

专业/工作 · 716

内容

结构体是值类型,赋值给新变量或作为属性嵌进另一个结构体时复制的是独立副本,改动副本不影响原实例;类是引用类型(和 [[闭包是引用类型]] 同理),赋值传递的是指向同一实例的引用,通过任意一个变量改动了实例状态,所有指向它的变量看到的都是同一份改动后的结果。二者除了这一点,属性、方法、下标、构造器、扩展、协议遵循这些能力几乎完全对等,唯独继承、运行时类型检查、析构、引用计数是类独有的。所以选结构体还是类,本质上不是在挑功能多少,而是在挑”这份数据该不该被多处共享同一份状态”这个语义问题。

参考来源

《Swift全解析:新式iOS实战开发》第10章《Swift类和结构体》