易采站长站为您分析Swift里的值类型与引用类型区别和使用,本文讲解了值类型与引用类型的区别、如何选择类型、什么时候该用值类型、什么时候该用引用类型等内容,需要的朋友可以参考下
// 下面是一个值类型的例子
struct S { var data: Int = -1 }
var a = S()
var b = a // b是a的拷贝
a.data = 42 // 更改a的数据,b的不受影响
println("(a.data), (b.data)") // 输出结果 "42, -1"
值类型就好像身份证复印件一样,复印出来之后,修改原件上面的内容,复印件上的内容不会变。
// 下面是一个引用类型的例子
class C { var data: Int = -1 }
var x = C()
var y = x // y是x的拷贝
x.data = 42 // 更改x的数据,等于同时修改了y
Swift里面的类型分为两种:
●值类型(Value Types):每个实例都保留了一分独有的数据拷贝,一般以结构体 (struct)、枚举(enum) 或者元组(tuple)的形式出现。
●引用类型(Reference Type):每个实例共享同一份数据来源,一般以类(class)的形式出现。
在这篇博文里面,我们会介绍两种类型各自的优点,以及应该怎么选择使用。
值类型与引用类型的区别
值类型和引用类型最基本的分别在复制之后的结果。当一个值类型被复制的时候,相当于创造了一个完全独立的实例,这个实例保有属于自己的独有数据,数据不会受到其他实例的数据变化影响:
复制代码// 下面是一个值类型的例子
struct S { var data: Int = -1 }
var a = S()
var b = a // b是a的拷贝
a.data = 42 // 更改a的数据,b的不受影响
println("(a.data), (b.data)") // 输出结果 "42, -1"
值类型就好像身份证复印件一样,复印出来之后,修改原件上面的内容,复印件上的内容不会变。
另一方面,复制一个引用类型的时候,实际上是默默地创造了一个共享的实例分身,两者是共用一套数据。因此修改其中任何一个实例的数据,也会影响到另外那个。
复制代码// 下面是一个引用类型的例子
class C { var data: Int = -1 }
var x = C()
var y = x // y是x的拷贝
x.data = 42 // 更改x的数据,等于同时修改了y








