swift語言有兩種基本的數(shù)據(jù)類型,即類class和結(jié)構(gòu)體struct,
swift Foundation框架的SDK,諸如String,Array,Dictionary都是基于struct實現(xiàn)的。
struct與class相比,有什么區(qū)別呢?
主要的區(qū)別就在于class是類型引用,而struct是值引用。
struct沒有繼承的功能,class有繼承功能。
Objective-C中常用的NSArray,NSDictionary, NSString, UIKit等都是類型引用;而NSInteger,CGFloat, CGRect等則是值引用。
類型引用(class reference),將變量a賦值給變量b,即b = a,這樣的賦值語句僅僅將b的指針與a的指針一樣,指向同一塊內(nèi)存區(qū)域,此時改變b的值,a也會跟著改變。
值引用(value reference),賦值語句b = a處理的過程是開辟一個新的內(nèi)存b,將a變量的內(nèi)容拷貝后存放到內(nèi)存b,這時a和b完全沒有關(guān)系的兩個變量,對b的改變不會影響到a。
struct沒有繼承的功能,這是因為swift在本質(zhì)上來說是面向協(xié)議(Protocol Oriented)的語言,struct沒有也不需要繼承的功能,為了實現(xiàn)某個功能,struct去服從并實現(xiàn)某個協(xié)議就即可,從一個較高的層次來看,struct+protocol是構(gòu)成swift面向協(xié)議語言的兩個基石。