Swift 訪問控制

weixin_34378969發表於2017-07-27

模組 Module

模組 是程式碼分佈的單一單元。比如一個被作為一個單位編譯和釋出,別且可以被其它模組用import匯入的框架或應用。
Xcode中的每個編譯目標(build target)比如app bundle或者framework在Swift中都是被作為單獨的模組。
原始檔source file 是模組中的單獨Swift原始碼檔案也就是應用或者框架的一個檔案.

訪問等級 Access Levels

Swift 提供了五種不同的訪問等級。

  • OpenPubilc 訪問等級可以在模組中的任何原始檔內訪問,也可以在其它匯入該模組的原始檔中被訪問。一般在設定框架的介面的時候用這兩個屬性。
  • Internal 訪問等級可以在所定義的模組中任何原始檔內訪問。一般在定義框架或者應用的內部結構時使用。
  • File-private訪問等級只能在該檔案內訪問。一般在整個都用的地方定義。對外部來說具體實現是隱藏的。
  • Private 訪問等級限制了例項在封閉的宣告中,即使是同一個檔案的擴充套件也不能訪問。一般在用在那些僅在當前的宣告中使用的程式碼部分。

Open訪問等級僅用在類和類成員,與Public的區別如下。

  • Public (或者比Public限制等級更高的訪問等級)定義的類,僅可在他們被定義的模組中定義子類。
  • Public(或者比Public限制等級更高的訪問等級) 定義的類成員,僅可在他們被定義的模組中被他們的子類重寫。
  • Open 定義的類可以在他們被定義的模組和其它匯入他們的模組中定義子類。
  • Open 定義的類成員可以在他們被定義的模組和其它匯入他們的模組中重寫。

把類標記為Open就意味著已經需要考慮好了外部模組將它作為基類的影響。

簡而言之,Open定義的類可以在匯入它的模組中重寫定義子類,類成員可以重寫。 而Public和其它級別都是不可以。

選擇

在被匯入的時候支援重寫 -> Open
在被匯入的檔案可以訪問 -> Public
在自己的模組中支援所有檔案訪問 -> Internal
在自己所在檔案中可以訪問 -> Fileprivate
在自己所定義的部分可以訪問(擴充套件都不可以訪問)-> Private

相關文章