第五章——結構體與類(序)

bestswifter發表於2017-12-27

感謝DJagger提供翻譯

在Swift中,我們可以有三種不同的方式儲存結構化的資料:結構體(struct)、列舉(enum)和類(class)。(我們會在本章後續部分提到第四種方式。)在Swift標準庫中,我們可以觀察到90%的公有型別都以結構體的形式定義,而列舉和類各佔5%。這些標準庫型別的性質佔了一部分原因,但是我們的確能從中看出Swift中結構體的重要性。在本章我們會著重介紹結構體和類的不同——而列舉與結構體類似。

以下是一些結構體與類關鍵的不同之處:

  • 結構體和列舉都是值型別,而類是引用型別。在設計結構體時,我們可以利用編輯器強制保證結構體的不可變性(immutability);而在設計類時,我們需要自己控制這一點。
  • 管理記憶體方式不同。結構體可以被直接儲存或讀取,而類會間接通過引用來進行。結構體不能被引用而是被拷貝
  • 結構體和列舉沒有繼承的概念。相比之下,沒被標記為final的類都可以被繼承。如果想要複用程式碼,我們需要其他技術,如組合、範型和協議擴充套件。

本章會探究這些不同之處的細節。我們從實體和值的不同入手。其次就是關於可變性的問題,以及letvar關鍵字在結構體和類上不同效果。接下來我會展示如何在結構體中使用引用型別,就像使用值型別一樣使用它。然後我們會對比記憶體工作方式的不同,尤其是引用型別的記憶體管理。根據這些細節,我們可以研究如何使用引用型別和值型別解決相同的問題。最後我們再來討論繼承的問題。

相關文章