Swift 訪問控制-Private / Internal / Public

Lin
3 min readOct 24, 2018

--

swift 中的訪問控制模型基於模塊(module)和源文件(Source File)這兩個概念,

module:指的是 Framework,因此在一個app中,import了很framework,每一個framework內即一個module,文件指的是 swift 中的 Swift File

Source Files :就是每一個.swift檔案

  • open:可以在任何地方被訪問、繼承、重寫。
  • public:可以在任何地方被訪問,在其他模塊中不能被繼承和重寫。
  • internal:在整個模塊內都可以被訪問。
  • fileprivate:其修飾的屬性可以再同一個文件被訪問、繼承和重寫,同一個文件指同一個swift文件,一個文件中可以有多個類。
  • private:其修飾的屬性和方法只能在本類被訪問和使用

對於那些我們只希望在當前文件中使用的屬性來說,當然我們可以在聲明前面加上private使其變為私有:

但是在開發中所面臨的更多的情況是我們希望在類型之外也能夠讀取到這個類型,同時為了保證類型的封裝和安全,只能在類型內部對其進行改變和設置。這時,我們可以通過下面的寫法將讀取和設置的控制權限分開:

因為set被限制為了private,就可以保證name只會在當前文件被更改。為之後更改或者調試代碼提供了很好的範圍控制,讓我們確定只需要在當前文件中來尋找問題

這種寫法沒有對讀取做限制,相當於使用了默認的internal權限。如果我們希望在別的module中也能訪問這個屬性,同時又保持只在當前文件可以設置的話,我們需要將get的訪問權限提高為public。屬性的訪問控制可以通過兩次的訪問權限指定來實現,具體來說,將剛才的聲明變為:

就可以在module之外也訪問到MyClassname

--

--