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