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面向协议语言的两个基石。