Swift4-類和結(jié)構(gòu)體

類和結(jié)構(gòu)體

1.Swift不需要你為自定義類和結(jié)構(gòu)體創(chuàng)建獨(dú)立的接口和實(shí)現(xiàn)文件。在 Swift 中,你在一個(gè)文件中定義一個(gè)類或者結(jié)構(gòu)體, 則系統(tǒng)將會(huì)自動(dòng)生成面向其他代碼的外部接口。
2.類與結(jié)構(gòu)體的對比:
在 Swift 中類和結(jié)構(gòu)體有很多共同之處,它們都能:

  • 定義屬性用來存儲(chǔ)值;
  • 定義方法用于提供功能;
  • 定義下標(biāo)腳本用來允許使用下標(biāo)語法訪問值;
  • 定義初始化器用于初始化狀態(tài);
  • 可以被擴(kuò)展來默認(rèn)所沒有的功能;
  • 遵循協(xié)議來針對特定類型提供標(biāo)準(zhǔn)功能。

類有而結(jié)構(gòu)體沒有的額外功能:

  • 繼承允許一個(gè)類繼承另一個(gè)類的特征;
  • 類型轉(zhuǎn)換允許你在運(yùn)行檢查和解釋一個(gè)類實(shí)例的類型;
  • 反初始化器允許一個(gè)類實(shí)例釋放任何其所被分配的資源;
  • 引用計(jì)數(shù)允許不止一個(gè)對類實(shí)例的引用。

3.結(jié)構(gòu)體在你的代碼中通過復(fù)制來傳遞,并且并不會(huì)使用引用計(jì)數(shù)。

4.定義:無論你在何時(shí)定義了一個(gè)新的類或者結(jié)構(gòu)體,實(shí)際上你定義了一個(gè)全新的 Swift 類型。

class SomeClass {
     // class definition goes here
}  
struct SomeStructure {
    // structure definition goes here
}

5.初始化器語法最簡單的是在類或結(jié)構(gòu)體名字后面接一個(gè)空的圓括號,例如 Resolution()或者 VideoMode()。

6.結(jié)構(gòu)體類型的成員初始化器

struct Resolution {
      var width = 0
      var height = 0 
  }
let vga = Resolution(width: 640, height: 480)

7.結(jié)構(gòu)體和枚舉是值類型
值類型是一種當(dāng)它被指定到常量或者變量,或者被傳遞給函數(shù)時(shí)會(huì)被拷貝的類型。
Swift 中所有的結(jié)構(gòu)體和枚舉都是值類型,這意味著你所創(chuàng)建的任何結(jié)構(gòu)體和枚舉實(shí)例——和實(shí)例作為屬性所包含的任意值類型——在代碼傳遞中總是被拷貝的。

8.類是引用類型
相對于拷貝,這里使用的是同一個(gè)對現(xiàn)存實(shí)例的引用。

9.有時(shí)候找出兩個(gè)常量或者變量是否引用自同一個(gè)類實(shí)例非常有用,為了允許這樣,Swift提供了兩個(gè)特點(diǎn)運(yùn)算符:

  • 相同于 ( ===),意味著兩個(gè)類類型常量或者變量引用自相同的實(shí)例;
  • 不相同于( !==)

10.按照通用準(zhǔn)則,當(dāng)符合以下一條或多條情形時(shí)應(yīng)考慮創(chuàng)建一個(gè)結(jié)構(gòu)體:

  • 結(jié)構(gòu)體的主要目的是為了封裝一些相關(guān)的簡單數(shù)據(jù)值;
  • 當(dāng)你在賦予或者傳遞結(jié)構(gòu)實(shí)例時(shí),有理由需要封裝的數(shù)據(jù)值被拷貝而不是引用;
  • 任何存儲(chǔ)在結(jié)構(gòu)體中的屬性是值類型,也將被拷貝而不是被引用;
  • 結(jié)構(gòu)體不需要從一個(gè)已存在類型繼承屬性或者行為。

11.字符串,數(shù)組和字典的賦值與拷貝行為
Swift 的 String , Array 和 Dictionary類型是作為結(jié)構(gòu)體來實(shí)現(xiàn)的,這意味著字符串,數(shù)組和字典在它們被賦值到一個(gè)新的常量或者變量,亦或者它們本身被傳遞到一個(gè)函數(shù)或方法中的時(shí)候,其實(shí)是傳遞了拷貝。

12.在上述有關(guān)字符串,數(shù)組和字典“拷貝”的描述中。你在代碼中所見到的行為好像總是拷貝。然而在后臺 Swift 只有在需要這么做時(shí)才會(huì)實(shí)際去拷貝。Swift 能夠管理所有的值的拷貝來確保最佳的性能,所有你也沒必要為了保證最佳性能來避免賦值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容