類和結(jié)構(gòu)體
struct Resolution{
var? width = 0;
var? height = 0;
}
class? VideoMode{
var? resolution = Resolution()
var interlaced = false
var frameRate? = 0.0
var name:String?
}
與Objective-C語言不同的是,Swift允許直接設(shè)置結(jié)構(gòu)體屬性的子屬性咆瘟。
結(jié)構(gòu)體類型的成員逐一構(gòu)造器
所有結(jié)構(gòu)體都有一個自動生成的成員逐一構(gòu)造器,用于初始化新結(jié)構(gòu)體實例中成員的屬性袒餐。新實例中各個屬性的初始值可以通過屬性的名稱傳遞到成員逐一構(gòu)造器之中:
let vga = Resolution(width:640, height: 480)
與結(jié)構(gòu)體不同,類實例沒有默認的成員逐一構(gòu)造器灸眼。
結(jié)構(gòu)體和枚舉是值類型
值類型被賦予給一個變量、常量或者被傳遞給一個函數(shù)的時候焰宣,其值會被拷貝霉囚。
類是引用類型
與值類型不同匕积,引用類型被賦予一個變量、常量或者被傳遞到一個函數(shù)時闪唆,其值不會被拷貝盅粪。因此苞氮,引用的是已經(jīng)存在的實例本身而不是其拷貝湾揽。
如果能夠判定兩個常量或者變量是否引用同一個類實例將會很有幫助。為了達到這個目的,Swift 內(nèi)建了兩個恒 等運算符:
? 等價于(===)? 不等價于( !== )
運用這兩個運算符檢測兩個常量或者變量是否引用同一個實例:
字符串(String)库物、數(shù)組(Array)、和字典(Dictionary)類型的賦值與復(fù)制行為
Swift 中,許多基本類型,諸如 String , Array 和 Dictionary 類型均以結(jié)構(gòu)體的形式實現(xiàn)戚揭。這意味著被賦值給 新的常量或變量,或者被傳入函數(shù)或方法中時,它們的值會被拷貝。
Objective-C 中 NSString , NSArray 和 NSDictionary 類型均以類的形式實現(xiàn),而并非結(jié)構(gòu)體民晒。它們在被賦值或 者被傳入函數(shù)或方法時,不會發(fā)生值拷貝,而是傳遞現(xiàn)有實例的引用。