- 模塊和源文件
- 模塊值得是獨立的代碼分發(fā)單元侄旬,框架或應(yīng)用程序會作為一個獨立的模塊來構(gòu)建和發(fā)布。在 Swift 中,一個模塊可以使用 import 關(guān)鍵字導(dǎo)入另外一個模塊佳谦。
- 源文件就是 Swift 中的源代碼文件址遇,它通常屬于一個模塊熄阻,即一個應(yīng)用程序或者框架。盡管我們一般會將不同的類型分別定義在不同的源文件中倔约,但是同一個源文件也可以包含多個類型秃殉、函數(shù)之類的定義。
- 訪問級別
- open: 公開權(quán)限浸剩;最高的權(quán)限钾军,可以被其他模塊訪問,繼承及復(fù)寫绢要。只能用于類和類的成員吏恭。
- public 共有訪問權(quán)限,類或者類的公有屬性或者公有方法可以從文件或者模塊的任何地方進(jìn)行訪問重罪。那么什么樣才能成為一個模塊呢樱哼?一個APP就是一個模塊,一個第三方API剿配,第三放框架等都是一個完整的模塊搅幅,這些模塊如果要對外留有訪問的屬性或者方法,就應(yīng)該使用 public 的訪問權(quán)限呼胚,public 的權(quán)限無法在其他模塊被復(fù)寫方法茄唐、屬性或被繼承。
- internal:顧名思義蝇更,internal 是內(nèi)部的意思沪编,即有著 internal 訪問權(quán)限的屬性和方法說明在模塊內(nèi)部可以訪問呼盆,超出模塊內(nèi)部就不可被訪問了。在 Swift 中默認(rèn)就是 internal 的訪問權(quán)限
- fileprivate:文件私有訪問權(quán)限漾抬,被 fileprivate 修飾的類或者類的屬性或方法可以在同一個物理文件中訪問宿亡。如果超出該物理文件,那么有著 fileprivate 訪問權(quán)限的類纳令,屬性和方法就不能被訪問挽荠。
- private:私有訪問權(quán)限,被 private 修飾的類或者類的屬性或方法可以在同一個物理文件中的同一個類型(包含 extension)訪問平绩。如果超出該物理文件或不屬于同一類型圈匆,那么有著 private 訪問權(quán)限的屬性和方法就不能被訪問。
- 潛規(guī)則
- 如果一個類的訪問級別是 fileprivate 或 private 那么該類的所有成員變量都是 fileprivate 或 private (此時成員無法修改訪問級別)捏雌,如果一個類的訪問級別是open跃赚、internal或者public 那么它的所有成員都是 internal,類成員的訪問級別不能高于類的訪問級別(注意:嵌套類型的訪問級別也符合此條規(guī)則)
- 常量性湿、變量纬傲、屬性、下標(biāo)腳本訪問級別低于其所聲明的類型級別肤频,并且如果不是默認(rèn)訪問級別(internal)要明確聲明訪問級別(例如一個常量時一個 private 類型的類類型叹括,那么此常量必須聲明為 private 或 fileprivate)
- 在不違反1、2兩條潛規(guī)則的情況下宵荒,setter 的訪問級別可以低于 getter 的訪問級別(例如一個屬性訪問級別是 internal汁雷,那么可以添加 private(set) 修飾符將 setter 權(quán)限設(shè)置為 private,在當(dāng)前模塊中只有此源文件可以訪問报咳,對外部是只讀的)侠讯。
- 必要構(gòu)造方法(required 修飾)的訪問級別必須和類訪問級別相同,結(jié)構(gòu)體的默認(rèn)逐一構(gòu)造函數(shù)的訪問級別不高于其他成員的訪問級別(例如一個成員是 private 那么這個構(gòu)造函數(shù)就是 private暑刃,但是可以通過自定義來聲明一個 public 的構(gòu)造函數(shù))厢漩,其他方法(包括其他構(gòu)造方法和普通方法)的訪問幾倍遵循潛規(guī)則1