9.类和结构体
類和結(jié)構(gòu)體是構(gòu)建代碼所用的一種通用且靈活的構(gòu)造體。我們可以使用完全相同的語法規(guī)則來為類和結(jié)構(gòu)體定義屬性(常量、變量)和添加方法,從而擴展類和結(jié)構(gòu)體的功能。
與其他編程語言所不同的是,Swift 并不要求你為自定義類和結(jié)構(gòu)去創(chuàng)建獨立的接口和實現(xiàn)文件。你所要做的是在一個單一文件中定義一個類或者結(jié)構(gòu)體,系統(tǒng)將會自動生成面向其它代碼的外部接口。
1.類和結(jié)構(gòu)體對比
【相同點】:
【不同點】: 與結(jié)構(gòu)體相比,類還有如下的附加功能:
【定義語法】:
class SomeClass {// class definition goes here }struct SomeStructure {// structure definition goes here}
【定義示例】:
//結(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?; }// TODO: 實例化 let someResolution = Resolution(); let someVideoMode = VideoMode();// TODO: 屬性操作 var width = someResolution.width; //someVideoMode.resolution.width = 100; var width2 = someVideoMode.resolution.width;// TODO: 結(jié)構(gòu)體類型的成員逐一構(gòu)造器 var otherResolution = Resolution(width: 30, height: 20); //【說明】:所有結(jié)構(gòu)體都有一個自動生成的成員逐一構(gòu)造器,用于初始化新結(jié)構(gòu)體實例中成員的屬性。新實例中各個屬性的初始值可以通過屬性的名稱傳遞到成員逐一構(gòu)造器之中。類實例沒有默認(rèn)的成員逐一構(gòu)造器。2.結(jié)構(gòu)體和枚舉是值類型
- 在 Swift 中,所有的基本類型:整數(shù)(Integer)、浮點數(shù)(floating-point)、布爾值(Boolean)、字符串(string)、數(shù)組(array)和字典(dictionary),都是值類型,并且在底層都是以結(jié)構(gòu)體的形式所實現(xiàn)。在 Swift 中,所有的結(jié)構(gòu)體和枚舉類型都是值類型。這意味著它們的實例,以及實例中所包含的任何值類型屬性,在代碼中傳遞的時候都會被復(fù)制。
3.類是引用類型
- 與值類型不同,引用類型在被賦予到一個變量、常量或者被傳遞到一個函數(shù)時,其值不會被拷貝。因此,引用的是已存在的實例本身而不是其拷貝。
4.類和結(jié)構(gòu)體的選擇
【考慮構(gòu)建結(jié)構(gòu)體】:
?5.字符串(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)有實例的引用。
轉(zhuǎn)載于:https://www.cnblogs.com/LeeGof/p/5675007.html
總結(jié)
- 上一篇: php-fpm打开错误日志的配置
- 下一篇: CentOS命令行界面与图形界面切换(图