swift语言有两种基本的数据类型,即类class和结构体struct,
swift Foundation框架的SDK,诸如String,Array,Dictionary都是基于struct实现的。
struct与class相比,有什么区别呢?
主要的区别就在于class是类型引用,而struct是值引用。
struct没有继承的功能,class有继承功能。
Objective-C中常用的NSArray,NSDictionary, NSString, UIKit等都是类型引用;而NSInteger,CGFloat, CGRect等则是值引用。
类型引用(class reference),将变量a赋值给变量b,即b = a,这样的赋值语句仅仅将b的指针与a的指针一样,指向同一块内存区域,此时改变b的值,a也会跟着改变。
值引用(value reference),赋值语句b = a处理的过程是开辟一个新的内存b,将a变量的内容拷贝后存放到内存b,这时a和b完全没有关系的两个变量,对b的改变不会影响到a。
struct没有继承的功能,这是因为swift在本质上来说是面向协议(Protocol Oriented)的语言,struct没有也不需要继承的功能,为了实现某个功能,struct去服从并实现某个协议就即可,从一个较高的层次来看,struct+protocol是构成swift面向协议语言的两个基石。